Download presentation
Presentation is loading. Please wait.
1
JTLS – Global Operations JTLS-GO
March 2008 JTLS – Global Operations JTLS-GO PostgreSQL As Oracle Alternative Zafer M. AKTAN ROLANDS & ASSOCIATES Corporation (R&A) ROLANDS & ASSOCIATES Corporation 1
2
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Introduction PostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture. It runs on all major operating systems, including Linux, UNIX and Windows. It is fully ACID compliant to ensure data integrity. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 2
3
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Introduction (continued) PostgreSQL has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). It includes most SQL:2008 data types. It has native programming interfaces for C/C++, Java, .Net, Python, Perl, ODBC, among others and its own PL/pgSQL. It supports storage of binary large objects. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 3
4
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Introduction (continued) The PostgreSQL license gives users the freedom to use, modify and distribute PostgreSQL in any form they like, open or closed source. Any modifications, enhancements, or changes you make are yours to do with as you please. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 4
5
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Introduction (continued) PostgreSQL is also a development platform upon which to develop in-house, web, or commercial software products that require a capable, powerful RDBMS. Today, PostgreSQL 9.x has a DISA STIG available allowing it be deployed in secure environments. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 5
6
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Introduction (continued) We first proposed utilizing PostgreSQL to support our JTLS-GO database tools in 2004, but given that there were security related concerns at the time, we have continued using Oracle as the database server. We were recently tasked to investigate using PostgreSQL as Oracle alternative. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 6
7
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Current Oracle RDBMS Utilization in JTLS-GO We currently utilize Oracle RDBMS in two separate segments in JTLS-GO: To support JTLS-GO scenario building process, prior to the GAME starts. To support Scenario Data Repository (SDR) clients, such as After-Action Review (AAR), during GAME execution. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 7
8
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO Scenario Building Process The JTLS-GO Database Development System (DDS) is a combination of Linux shell scripts, Oracle SQL scripts, a customized module of the Oracle GlassFish J2EE application server, and a Java Rich Internet Application client (DDSC) which is deployed through the Java Web Start. This system interacts with a certified Oracle database server and requires an Oracle account to be provisioned for the corresponding JTLS-GO scenario. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 8
9
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO Scenario Building Process (Continued) JTLS-GO scenario data resides in the database tables of the corresponding Oracle account. A JTLS-GO scenario builder can access the related JTLS-GO scenario data in Oracle to view or edit these data using the web- enabled Database Development Client (DDSC) application. The DDSC application includes many custom- build functionality. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 9
10
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO Scenario Building Process (Continued) The developed JTLS-GO scenario can then be unloaded to ASCII files to be processed by the Scenario Verification Program (SVP). JTLS-GO scenario builder will then address the error and warnings reported by the SVP. This scenario error and warning checking and correcting process will continue until the scenario will fulfill the goals of the target event. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 10
11
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO Scenario Building Process (Continued) The scenario development process can be supplemented with our custom build Java applications JTLS-GO Order of Battle Editor (JOBE) and JOBE Interface Navigator (JINN). This summarizes the JTLS-GO scenario building process and how Oracle RDBMS is utilized by our database development tools. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 11
12
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO Scenario Building Process (Continued) The freely available Oracle Express Edition (also known as 11gR2 XE) is currently sufficient in supporting the JTLS-GO scenario building process. Our DDS related Oracle database schema was architected not to utilize any of the advanced capabilities which are available in either the Standard Edition or in the Enterprise Edition of Oracle RDBMS. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 12
13
Oracle in Supporting JTLS-GO SDR
(Scenario Data Repository) Applications JTLS-GO Scenario Data Repository (SDR) September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 13
14
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO SDR Applications (Continued) Between these three SDR client programs, only the AARC can collect more than 11Gb of data, which is the maximum allowed user data limit of the freely available Oracle Express Edition (XE), during an exercise or training event. In addition to the user data limit of 11Gb, the freely available Oracle Express Edition has other limitations such as the capped memory size (SGA+PGA) and that it cannot be patched. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 14
15
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO SDR Applications (Continued) Because of the limitations of the freely available Oracle Express Edition, we do not recommend using it to host the AAR data during a JTLS-GO event. The Oracle Standard Edition TWO (SE2) version should be used instead and it is sufficient to host the JTLS-GO AAR data and support other SDR clients as well. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 15
16
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle in Supporting JTLS-GO SDR Applications (Continued) It should be noted that using the JTLS-GO Scenario Data Repository client applications is not a requirement to execute JTLS-GO. The JTLS-GO users should evaluate the added value of utilizing any of the SDR clients, which are mutually exclusive from each other. If SDR clients are not utilized during the GAME, then no Oracle RDMBS installation is required in the JTLS-GO runtime environment. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 16
17
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migrations The official technical term in database literature from moving from one database server product to another is called "migration". The cost is the most obvious reason and also the benefit of migrating from Oracle RDBMS to PostgreSQL. The PostgreSQL License, which is like a combination of BSD and MIT open source licenses, gives users the freedom to use, modify and distribute. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 17
18
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migrations (Continued) Some of the commercial relational databases are including newer Enterprise Level features in their high-end products only. Increasing popularity of the Cloud and virtualization technologies, in support of Platform as a Service (PaaS) or Infrastructure as a Service (IaaS) software deployments, also brought different licensing challenges, especially when it comes to Oracle Software. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 18
19
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migrations (Continued) Oracle RDMBS licensing challenges in the Cloud and virtualized environments created new opportunities for companies like Amazon and EnterpriseDB and many others, which provides services and software based on the popular PostgreSQL RDBMS. Examples: Amazon Redshift (based on PostgreSQL 8.0.2), Amazon RDS service (for PostgreSQL), EnterpriseDB (with their commercial EDB Advanced Server), OpenSCG (services and support), And many others... September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 19
20
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Benefits of Migrating to PostgreSQL The most obvious benefit of migrating to PostgreSQL is cost. The ability to create technical solutions based on need not licensing. Avoid deploy things sub-optimally to save money on licenses instead of the right technical solution. The case when moving your applications to virtualized servers and to Cloud based services. That could also mean not updating to newer hardware because the newer servers all have more occupied sockets and cores than the previous generation. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 20
21
Copyright 2017, ROLANDS & ASSOCIATES Corporation
When to Migrate and Migration Life Cycle All too often people took to migrate to PostgreSQL from Oracle when they are up for a license renewal. However, at that point it is too late. A migration does not happen overnight. The most time consuming and intensive part of a data migration project is actually testing the application. Continuity is also a challenge in Oracle to PostgreSQL migration projects. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 21
22
Copyright 2017, ROLANDS & ASSOCIATES Corporation
When to Migrate and Migration Life Cycle (Continued) Migrating an application is more than just converting some stored procedures to a new syntax. The full life cycle spans from several months to a year after you have moved to production. The behavior of a PostgreSQL database is different than Oracle and it is not until your application is running in production, even if your application goes through vigorous tests, that you really understand the maintenance required. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 22
23
Copyright 2017, ROLANDS & ASSOCIATES Corporation
JTLS Database Tools as Migration Candidates Oracle Database Express Edition (Oracle Database XE) is an entry-level, small-footprint database based on the Oracle Database 11g Release 2 version. It's free to develop, deploy, and distribute; fast to download; and simple to administer. JTLS-GO Database Development System (DDS) for scenario building requires only the freely available Oracle Express Edition (XE). Oracle Personal Edition can also be used if there is only a single JTLS-GO scenario builder in the team. Only the After-Action Review client requires Oracle Standard Edition 2 (SE2) version at GAME runtime. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 23
24
Copyright 2017, ROLANDS & ASSOCIATES Corporation
JTLS Database Tools as Migration Candidates (Continued) Currently, the Oracle Standard Edition 2 (SE2) license on a single socket bare metal server box is listed on as $7,350 ($3500 for the processor license + $3850 for first year support) for 1 year. A prominent company which provides Oracle to PostgreSQL migration services, support and training, including conferences around the world, states the following in one of their white papers: "If your application is happily using Standard Edition 2 on a server with only a couple of cores, it just does not make financial sense to move to PostgreSQL." September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 24
25
Copyright 2017, ROLANDS & ASSOCIATES Corporation
JTLS Database Tools as Migration Candidates (Continued) However, given that Oracle licensing is different and convoluted especially for those virtualizing technologies that are not "certified" by Oracle Corporation in Cloud deployments, using Oracle Standard Edition 2 (SE2) for a single Virtual machine (or appliance) might not be possible (from licensing point of view). September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 25
26
Copyright 2017, ROLANDS & ASSOCIATES Corporation
JTLS Database Tools as Migration Candidates (Continued) A possibly more compelling long-term benefit of using PostgreSQL as a replacement of Oracle to support JTLS-GO database tools, is the ability to create technical solutions based on need not licensing and data space limitations. We have architected our DDS and SDR database schemas not to utilize any of the advanced features, capabilities, utilities available only in the commercial offerings of Oracle RDBMS (Standard Edition 2 (SE2) or Enterprise Edition EE). September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 26
27
Copyright 2017, ROLANDS & ASSOCIATES Corporation
JTLS Database Tools as Migration Candidates (Continued) However, this can also be a limitation for future advancements in our database tools. For example, if we want to add geographic information system (GIS) support to our database tools, then we cannot use the freely available Oracle Express Edition or the Standard Edition. The Oracle Spatial is only available as an extension to Oracle Enterprise Edition (which is very expensive). This is one of the reasons why NATO's LOGFAS (Logistics Functional Area Services) is using PostgreSQL. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 27
28
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Quick Benchmark with PostgreSQL and JTLS-GO Scenario Data There are not many if any PostgreSQL versus Oracle RDBMS benchmarking documentation available. However, the official organization called Transaction Processing Performance Council ( a document and the related user's guide for their benchmark (TPCx-V) which measures the performance of a server running virtualized databases, which uses PostgreSQL as the RDBMS in the test. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 28
29
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Quick Benchmark with PostgreSQL and JTLS-GO Scenario Data There are not many if any PostgreSQL versus Oracle RDBMS benchmarking documentation available. However, the official organization called Transaction Processing Performance Council ( a document and the related user's guide for their benchmark (TPCx-V) which measures the performance of a server running virtualized databases, which uses PostgreSQL as the RDBMS in the test. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 29
30
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Summary of Our Benchmark Test Environment (JTLS-GO release was used) Host System: Ubuntu LTS (64bit) with single-socket Intel Core i GHz Virtual Machine: VMware Workstation Pro , 20Gb of memory, 4 cores, 120 Gb of disk space, Oracle Linux 6.9 with UEK Kernel settings were optimized automatically by Oracle Express Edition rpm installation. In addition, vm.swappiness was set to 10 to minimize swapping. Huge Pages was enabled, Transparent Huge Pages was disabled. 11g Oracle Express Edition (XE) was installed and configured (for connections from the JTLS-GO account) using default ports. PostgreSQL (with pgbouncer) was installed and configured (for connections from the JTLS-GO account) using default ports. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 30
31
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Summary of Our Benchmark Test Environment (Continued) For the quick benchmark testing, we have selected the terrain_grid_layers data (31945 rows, 8 columns per record) and the phl_tgc data ( rows, 4 columns per record) from our SDBKOR50 standard scenario. The test related user account was created / provisioned in both PostgreSQL and Oracle Express Edition. We first tested the data loading speeds in PostgreSQL from within the JTLS-GO account. Converted both the terrain_grid_layers and phl_tgc tables from Oracle to PostgreSQL syntax and created simple .sql scripts to execute against PostgreSQL database from within the JTLS-GO account. Copied both the terrain_grid_layers and phl_tgc ascii scenario data into comma delimited CSV files for PostgreSQL data load testing using simple awk script statements. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 31
32
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Summary of Our Benchmark Test Environment (Continued) Set the timing on in PostgreSQL Created the tables and loaded the data into PostgreSQL from within the JTLS-GO ( ) account. Details (used commands, creation, load and query timings) are available. Obtaining the data load speeds to Oracle Express Edition from within the JTLS-GO account was also easy. Currently the data loading process under JTLS-GO is utilizing Oracle's SQL*Loader (sqlldr) utility, which is available under Oracle Express Edition as well. We have tuned the Oracle SQL*Loader to dynamically set the commit intervals dynamically based on the existing record size. The SQL*Loader process generates a .log file for each ascii data file it loads into Oracle database. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 32
33
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Summary of Our Benchmark Test Environment (Continued) The data load speeds for the PHL_TGC data, which had records in 3 columns (133Mb file size) were: PostgreSQL 9.6.4: seconds Oracle XE (11gR2): seconds September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 33
34
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO Currently there are many publications, white papers and presentations available from the Internet and from the companies which provide migration services, support and tools, documents the possible challenges of an Oracle to PostgreSQL migration project. Some of those challenges might become easier when we utilize currently available conversion tools. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 34
35
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO Between the JTLS-GO Scenario Data Repository (SDR) and the Database Development System (DDS) Oracle database schema's, the SDR (SDC, OEC and AARC clients) related database objects would be the easiest to migrate given that there is really not much of a "relational design" in the related schema. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 35
36
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) The SDC and OEC database tables are mutually exclusive and with no relationships and no other specific database objects other than the tables. The AARC tables have some child fields to a generic Object Lookup table, has some sequences, couple triggers, etc. Also, the bitmap indexes (a capability only available in the Enterprise Edition of Oracle RDBMS) can be replaced with similar capability in PostgreSQL. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 36
37
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) The Oracle Pro*C code is the most challenging part of the SDR migration from Oracle to PostgreSQL - given there is no Pro*C in PostgreSQL. However, there is a way to write embedded SQL statements in C code, which needs to be investigated and implemented for SDC, OEC and AARC client programs. PostgreSQL provides an extensive C Language API to write embedded SQL with C programs. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 37
38
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) The JTLS-GO Database Development System (DDS) will be the most challenging part of the Oracle to PostgreSQL migration project, given that since the migration from Oracle iAS to GlassFish and Java, our database schema (since version 4.0 of JTLS) has become more and more complex. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 38
39
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) We do have stored procedures, for renaming, for populating certain child tables. We do have flashback version queries, utilized heavily by the GlassFish middle tier API's which are the foundation of data synchronization among DDSC's. We need to find an alternative solution applicable when PostgreSQL is used. We do have custom database triggers to support populating and managing dynamic lookup tables such as the UNIT table or the TARGET tables. We do have custom triggers in conjunction with custom stored procedures to support the renaming of the named primary key column values - such as unit names, aircraft class names, etc. We do have custom triggers to manage other Foreign Key (FK) related checks, etc. in our DDS database schema. In addition to all the custom database objects in our DDS Oracle database schema, we do have Oracle imposed restrictions such as not being able to have "ON UPDATE UPDATE" keys – which does not exist in Oracle but does exist in PostgreSQL database, which will allow us to do the renaming in a different way, and by doing so - impacting our existing stored procedures, triggers, etc. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 39
40
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) We also do have many shell scripts that utilizes Oracle database utilities, such as sqlldr (SQL*Loader) which allows us to load ascii JTLS-GO scenario data files into related Oracle database tables. All of those scripts need to be revisited, modified to accommodate PostgreSQL database server related alternatives. Some of the capabilities in our Java code such as parsing the tnsnames.ora file, which would not exist under PostgreSQL implementation, needs to be modified as well. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 40
41
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) All the GlassFish related API's need to be revisited to ensure that they do work against the PostgreSQL database. Our scenario data modification process from an older JTLS-GO version to the current JTLS-CO version, also needs to be revisited and modified based on the new PostgreSQL instead of the legacy use of Oracle. To support the new RDBMS, the ascii file structures might need to be changed accordingly and an external application might need be developed for the scenario conversion process. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 41
42
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Oracle to PostgreSQL Migration Challenges for JTLS-GO (Continued) In addition to all these initial assessments based of our expertise with the Oracle database server and some generic knowledge on PostgreSQL, we need to stress that initial work in an Oracle to PostgreSQL migration project will require an exponential learning curve in DBA matters as well, such as installation, configuration, customization, documentation, supporting our JTLS-GO users, etc. should be added to the time required for such a migration project as well. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 42
43
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Using EDB Advanced Server Instead of PostgreSQL The company EnterpriseDB claims that their EDB Advanced Server product, which is based on the core PostgreSQL with added custom tools, utilities, capabilities of their own (such as EDB*Loader, EDB*Plus, EDB*OCI, EDB*Wrap, PL/SQL native support, etc.), provides 90% Oracle compatibility and therefore, faster migrations. However, EDB Advanced Server product is not free and has a special universal core based licensing model. It has 4 minimum cores need to be licensed. For each core the universal core licensing cost is $1750 (GSA pricing is available) and offered for 1 year or 3 years terms. This brings the cost for installing EDB Advanced Server on a single quad-core bare metal server for a 1-year term to $7000, which is very close to Oracle Standard Edition 2 (SE2) licensing cost on the very same box. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 43
44
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Using EDB Advanced Server Instead of PostgreSQL (Continued) If there are more cores in that single-socket bare metal server box (given the occupied socket does not have an MCM chip) the licensing cost of EDB Advanced Server will be more than the Oracle Standard Edition 2 (SE2) license (which is based on the occupied socket and not the core count). For virtualized environments deployed via a Cloud provider, the EDB Advanced Server licensing make sense and might save a lot compared to Oracle Enterprise Edition version. Otherwise, even though using EDB Advanced Server might shorten the migration time significantly, switching from one commercial database product to another commercial database, might not be financially feasible for the entire JTLS User's Community. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 44
45
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Conclusion Based on the information presented, our initial assessment of an Oracle to PostgreSQL migration project for our JTLS database tools - including the SDR, DDS and all the middle tier and Java code and shell scripts, would be a year long effort. As an alternative, separating the project and only migrating the SDR components or only the After-Action Review Client (AARC), to eliminate Oracle RDBMS dependency at JTLS-GO runtime, will shorten the project duration. This is why we do recommend that we tackle with the Oracle to PostgreSQL migration project - if tasked - for JTLS instead of the JTLS 5.1 version.. September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 45
46
Copyright 2017, ROLANDS & ASSOCIATES Corporation
Questions September 2017 Copyright 2017, ROLANDS & ASSOCIATES Corporation 46
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.