リリース12cR1.3.0.5 Enterprise Edition
このリリースのOracle NoSQL Databaseには、複数の新機能が追加されています。これには、ユーザー/パスワード認証、ネットワーク・セキュリティ、セカンダリ・ゾーン、および型指定データと表形式データ・モデル(これにより、表内のフィールド上で2次索引を定義する機能が追加されます)のサポートが含まれます。この表インタフェースにより、表、索引およびデータ型にアクセスするための新しいクライアントAPIとともに、これらの新しい構成メンバーを管理するためのCLIが追加されます。管理者ガイドの既存のOracle NoSQL Databaseデプロイの更新に関する項を参照してください。
リリース3.0はJava SE 7以降との互換性があり、Oracle JDK 7u51に対してテストおよび認証されています。最新の不具合修正およびパフォーマンス改善を利用するために、最新のJavaリリースにアップグレードすることをお薦めします。
Java 7より前のバージョンのJavaとともにこのリリースを使用しようとすると、次のようなエラー・メッセージが表示されます。
Exception in thread "main" java.lang.UnsupportedClassVersionError: oracle/kv/impl/util/KVStoreMain : Unsupported major.minor version 51.0
表および索引は、管理CLIを使用して定義され、プログラムAPIを介してアクセスされます。データCLIが拡張され、表および索引に対しても操作を実行できるようになりました。APIについてはOracle NoSQL Database javadocで説明されており、主にoracle.kv.tableパッケージ内にあります。
NoSQL DBリリース2を使用して作成されたデータが、準拠するAvroスキーマを使用して作成されたものである場合、このデータをオーバーレイする表を定義できます。準拠するリリース2のデータで2次索引を作成するには、このオーバーレイが必要です。
既存のキー/値インタフェースは引き続き使用可能です。
-store-security
)が新しく追加されている、makebootconfigに対する変更は除きます。新機能の使用を希望するユーザーは、次の変更領域に注意する必要があります。
-store-security
が用意されました。これは、新しいKVStoreデプロイメントに対するセキュリティを有効化するのに使用されます。また、-store-securityフラグは、非セキュアなデプロイメントを有効化するためにも使用され、実際にそのような場合にも必須となります(-store-security none)。
setSecurityProperties()
getSecurityProperties()
KVStoreFactory.getStore(KVStoreConfig、LoginCredentials、ReauthenticateHandler)
この新しいメソッドでは、新しいインタフェースが使用されます
LoginCredentials
ReauthenticateHandler
これは、新しいクラスPasswordCredentials
の場合も同様です。
login()
logout()
UnauthorizedException
AuthenticationFailureException
AuthenticationRequiredException
ユーザーは、セキュリティ・プロパティ・ファイルについてもよく理解している必要があります。これらのファイルは、セキュアなストアに対してKVStoreコマンドライン・ユーティリティ・プログラムを使用する際に必要であり、セキュアなストアに対してアプリケーションを実行する際にも役立つ場合があります。
この機能は、『Oracle NoSQL Databaseセキュリティ・ガイド』や管理者ガイドおよび製品のJavadocでさらに詳しく説明されています。
"datacenter"という単語が含まれるコマンドは非推奨となり、"zone"という単語を使用したコマンドに置き換わりました。このリリースでは、以前のコマンドもそのまま機能します。新しいコマンドは、次のとおりです。
plan deploy-zone
plan remove-zone
show zones
ゾーンを指定するコマンド・フラグは、ゾーンIDの場合は-zn
に、ゾーン名の場合は-znname
に変更されました。以前の-dc
および-dcname
フラグは非推奨となりましたが、このリリースではそのまま機能します。また、ゾーンIDはzn接頭辞を使用して指定できるようになりましたが、以前のdc接頭辞も現在サポートされています。
管理GUIが、この新しい「ゾーン」という用語を使用するように変更されました。[#22878]
show plan
コマンドで、移行の完了時間の見積りが示されるようになりました。次に例を示します。
Plan Deploy Topo (12) State: RUNNING Attempt number: 1 Started: 2014-01-14 17:35:09 UTC Ended: 2014-01-14 17:35:27 UTC Total tasks: 27 Successful: 12 Incomplete: 15 Incomplete tasks 3 partition migrations queued 1 partition migrations running 11 partition migrations succeeded, avg migration time = 550164 ms. Estimated completion: 2014-01-14 19:57:37 UTC[#22183]
oracle.kv.Consistency.NONE_REQUIRED_NO_MASTER
を使用して、目的の読取り操作が必ずマスターではなくレプリカによって処理されるよう指定できるようになりました。読取りの負荷が高いアプリケーション(分析など)の場合、マスターに対する負荷を軽減するために、読取り要求を分離し、これらがマスターではなくレプリカに対してのみ実行されるようにした方がよい場合があります。この種の読込みの分離を実現する上で望ましいメカニズムが、新しいセカンダリ・ゾーン機能です。この目的のためにはこの機能を採用することをお薦めします。ただし、セカンダリ・ゾーンの使用が望ましくない場合や現実的でない場合は、oracle.kv.Consistency.NONE_REQUIRED_NO_MASTER
を使用すると、セカンダリ・ゾーンの場合に必要となる可能性があるリソースの追加なしで同様の効果を上げることができます。[#22338]
KVStoreConfig.setReadZones()
KVStoreConfig.getReadZones()
これらのメソッドを使用すると、指定したゾーン内にあるノードについてのみ読取り操作が実行されるよう要求できるようになります。
-runadmin
コマンドライン引数がオプションとして用意されました。これを使用すると、-admin
の値が0に設定されている場合でもSNAでブートストラップ管理を強制的に起動できます。
管理CLI内のplan deploy-adminのオプション-port
が変更され、管理Webサービスの起動を制御できるようになりました。デプロイで-port
が0に設定されている場合、管理のWebサービスは起動されません。
ユーザーは、管理CLIのplan change-paramコマンドを介してデプロイメント後に管理のHTTPポートを変更し、管理によるWebサーバーの実行の有無に関する設定を変更することもできます。[#22344]
topology redistribute
コマンドでストレージ・ディレクトリの設定が無視される原因であった問題を修正しました。[#23161]
InputStream.skip
に対するコールによってゼロ以外の値が返されるかぎり、入力ストリームを開始位置に配置するためにこのコールを必要に応じて繰り返すようLOB実装を変更しました。コールによってストリームが必要な開始位置に移動されない場合、IllegalArgumentException
がスローされます。
KVStore.appendLOB()
では、既存のLOB (ラージ・オブジェクト)への追加が許可されるようになりました。この変更の一環として、メソッドPartialLOBException.isPartiallyDeleted()
が非推奨となり、新しいメソッドPartialLOBException.getPartialState()
が推奨となります。この新機能の詳細な説明は、これらの新しいメソッドに付属のJavadoc、およびインタフェースKVLargeObject
に関して更新されたドキュメントを参照してください。
このリリースには、以前のリリースで作成されたLOBに対する下位互換性があります。ただ、これには1つの例外があり、これ以降のリリースで作成されるLOBのみが追加操作をサポートします。以前のリリースで作成されたLOBに対して追加操作を使用しようとすると、メソッドによりUnsupportedOperationExceptionがスローされます。
このリリースで作成されたLOBは、以前のリリースを使用しているクライアントから読取りや削除を行うことはできません。通常、このような操作は失敗し、ConcurrentModificationExceptionがスローされます。新しいLOBを作成する前にすべてのクライアントをこのリリースに更新するようにしてください。[#22876]
KVROOT/<storename>/log
ディレクトリ(NoSQLに関するすべてのロギング情報用の標準の場所)に配置されるようになりました。このデフォルトの動作は、JDKリリース1.7以降のリリースを使用している場合のみ適用されます。これは、GCログのローテーションは最新のJDKでのみサポートされるためです。ロギングによるリソースのオーバーヘッドは最小限です。これらのログ・ファイルを即座に使用できるようにしておくことは、本番Javaアプリケーションのデプロイメントに関するベスト・プラクティスに準拠しています。これにより、必要な場合に、GC問題をより簡単に診断できるようになります。[#22858]
StoreIteratorConfig
の引数チェックの不具合が修正されました。[#23010]
KVStore.storeIterator()
およびKVStore.storeKeysIterator()
の新たなオーバーロードには、パラレル・スキャンが導入されています。その他のstoreIterator()
メソッドでは、すべてのシャードとレプリケーション・ノードをシリアルにスキャンします。新しいパラレル・スキャン・メソッドでは、レプリケーション・ノードをパラレルにスキャンする際に使用するクライアント側のスレッド数を指定できます。[#22146]
kvshell-> put -key /test -value ./emp.insert -file -json Employee Could not create JSON from input: Unable to serialize JsonNode現在は、次のような有用な応答が生成されます。
kvshell-> put -key /test -value ./emp.insert -file -json Employee Exception handling command put -key /test -value ./emp.insert -file -json Employee: Could not create JSON from input: Expected Avro type STRING but got JSON value: null in field Address of Employee[#22791]
java.lang.IllegalStateException: Transaction 30 detected open cursors while aborting at com.sleepycat.je.txn.Txn.abortInternal(Txn.java:1190) at com.sleepycat.je.txn.Txn.abort(Txn.java:1100) at com.sleepycat.je.txn.Txn.abort(Txn.java:1073) at com.sleepycat.je.Transaction.abort(Transaction.java:207) at oracle.kv.impl.util.TxnUtil.abort(TxnUtil.java:80) at oracle.kv.impl.api.RequestHandlerImpl.executeInternal(RequestHandlerImpl.java:469) at oracle.kv.impl.api.RequestHandlerImpl.access$300(RequestHandlerImpl.java:122) at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:301) at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:290) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:135>[#22152]
plan deploy-topology
コマンドに保護手段が追加され、トポロジのバランス再調整とプランの再配分における信頼性が向上しました。レプリケーション・ノードを別のストレージ・ノードに移動する場合、操作を行う前に、操作対象のストレージ・ノードが起動され実行中であることをコマンドによってチェックするようになりました。[#22850]
plan deploy-topology
コマンドを使用してストアのトポロジを変更すると、次のエラーが発生することがあります。ストア状態の整合性が失われておらず、コマンドを手動で再試行できるとしても、コマンドは通信の不調からより速やかに回復できる必要があります。
... [admin1] Task 2/RelocateRN ended in state ERROR with java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home on sn4 2/RelocateRN failed. java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home
コマンドの待機時間が調整され、再試行が適切に行われるようになり、レプリケーション・ノードの移動が完了したかどうかを確認できるようになりました。[#22596]
java -jar kvstore.jar ping
コマンドを使用すると、ストア内で有効ではなくなったコンポーネントに関する疑似メッセージが生成される場合がありました。
Failed to connect to service commandService Connection refused to host: 10.32.17.12; nested exception is: java.net.ConnectException: Connection refused SNA at hostname:localhost registry port: 6000 has no available Admins or RNs registered.これらのメッセージは特に、デプロイされた管理サービスをホストしていないストレージ・ノードのブートストラップ管理に対して発生します。ストアの整合性はとれているため、混乱をまねくエラー・メッセージは削除されました。[#22639]
plan deploy-topology
コマンドが誤って失敗する可能性がありました。これは修正されました。
... INFO [rg1-rn1] Failed pushing entire topology push to rg1-rn3 updating from topo seq#: 0 to 1001 Problem:Update to topology seq# 1001 failed ... oracle.kv.impl.fault.OperationFaultException: Update to topology seq# 1001 failed at oracle.kv.impl.rep.admin.RepNodeAdminImpl$6.execute(RepNodeAdminImpl.java:261) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:169) at oracle.kv.impl.rep.admin.RepNodeAdminFaultHandler.execute(RepNodeAdminFaultHandler.java:117) ...INFO [rg1-rn3] Topology update skipped. Current seq #: 1001 Update seq #: 1001[#22678]
plan deploy-topology
コマンドを実行する場合に適用されます。ストレージ・ノードに対するレプリケーション・ノードの状態の通知が遅れると、マスター職責の最適な配分が保てなくなります。[#22689]
plan deploy-topology
コマンドを実行すると管理サービスが応答しなくなるバグを修正しました。この間、管理サービスのプロセスはアイドル状態になり、時折1~2秒のCPU時間を消費するだけで、管理CLIを使用して新しい接続を試みても応答しませんでした。この問題は、数百コンポーネントが含まれるような大規模なクラスタでのみ発生すると考えられます。[#22694]
plan deploy-topology
でトポロジが変更されると、レプリケーション・ノードが別のストレージ・ノードに移動します。この際に一時的なネットワーク障害が発生した場合の回復方法が改善されました。移動に関連するシャードとストレージ・ノードが使用可能で変更を受け入れる準備ができていることを確認するための事前チェック追加されました。移動の途中でネットワーク障害が発生した場合に、再試行のためにシステム管理者が発行するコマンドが使いやすくなりました。[#22722]
INFO [sn1] rg2-rn2: ProcessMonitor: startProcess INFO [sn1] rg2-rn2: ProcessMonitor: stopProcess SEVERE [sn1] rg2-rn2: ProcessMonitor: Unexpected exception in MonitorThread: java.lang.NullPointerExceptionjava.lang.NullPointerException at oracle.kv.impl.sna.ProcessMonitor$MonitorThread.run(ProcessMonitor.java:404)[#22830]
新しいCLIコマンドは、アップグレード・プロセスをサポートする管理者ツールとなります。これらのコマンドを使用した汎用のアップグレード手順は次のとおりです。
verify prerequisite
コマンドを使用し、ストア全体がアップグレード対象として適切なソフトウェア・バージョンであることを確認します(すべてがNoSQL DBバージョン2.0であれば前提条件として適格です)。
show upgrade-order
コマンドを使用して、アップグレードするノードの順序付きリストを取得します。
verify upgrade
コマンドを使用して、進行状況を監視し、アップグレードが成功したことを確認します。
アップグレード手順を中断した場合は、必要に応じて手順4から6を繰り返してアップグレードを完了してください。
verify prerequisite [-silent] [-sn snX]*
このコマンドは、ストアの一連のストレージ・ノードが現行バージョンへのアップグレードに必要な前提条件を満たしていることを確認し、前提条件を満たしていないコンポーネントや接続できないコンポーネントを表示します。また、インストールされているソフトウェアが現行バージョンより新しいマイナー・リリースであるという無効なダウングレード状況でないこともチェックしてレポートします。このコマンドで、現行バージョンとはコマンドライン・インタフェースを実行しているソフトウェアのバージョンのことです。ストレージ・ノードが指定されていない場合は、ストア内のすべてのノードがチェックされます。
verify upgrade [-silent] [-sn snX]*
このコマンドは、ストアの一連のストレージ・ノードが現行バージョンに正常にアップグレードされたことを確認し、まだアップグレードされていないコンポーネントや接続できないコンポーネントを表示します。このコマンドで、現行バージョンとはコマンドライン・インタフェースを実行しているソフトウェアのバージョンのことです。ストレージ・ノードが指定されていない場合は、ストア内のすべてのノードがチェックされます。
show upgrade-order
このコマンドは、ストアの可用性を維持するためにアップグレードする必要がある順序で、ストレージ・ノードのリストを表示します。このコマンドは、1つ以上のストレージ・ノードを1行に表示します。1行に複数のストレージ・ノードが表示される場合、スペースで区切られます。1行に複数のストレージ・ノードが表示されている場合、そのノードをまとめて安全にアップグレードできます。複数のノードをまとめてアップグレードする場合、すべてのノードのアップグレードが完了してからでなければ、リストの次のノードはアップグレードできません。
verify [-silent]
コマンドは非推奨となり、verify configuration [-silent]
に置き換えられます。verify [-silent]
コマンドは、このリリースでも引き続き動作します。
WriteOperations
(examples
ディレクトリにあります)によって提供されるサンプル・コードに、ラージ・オブジェクト(LOB、KVLargeObject
を参照)に対する書込み操作を実行するメソッドが追加されました。このリリースで追加された新しいユーティリティ・メソッドは、 FaultException
が発生したときに、関連するLOB操作を正しく再試行します。このリリースより前には、WriteOperations
ユーティリティはラージ・オブジェクトでないオブジェクトに対してしか再試行メソッドを提供していませんでした。[#21966]
java.net.InetAddress.getLocalHost() returned loopback address:<hostname> and no suitable address associated with network interfaces.これは修正されました。[#22252]
RequestTimeoutException
がクライアントに伝播されるようになり、基底となる永続ストアからの当初の例外は原因としてラップされるようになります。この例外が発生したときに採用する戦略を含めた詳細は、RequestTimeoutException
のJavadocを参照してください。
これは修正されました。[#21210]
hideUserData
をtrueに設定すると(これがデフォルトです)、サーバー側のログに出力される、またはCLIコマンドを通じて表示されるエラー・メッセージは、キー/値を"[hidden]"という文字列に置き換えます。エラーで実際のレコードの内容を見るには、パラメータをfalseに設定してください。[#22376]
show plan -id <id>
コマンドで表示できるようになっています。[#22101]
examples.hadoop.CountMinorKeys
サンプルを実行すると、そのサンプルによって開始されるMapReduceジョブがIncompatibleClassChangeError
のために失敗していました。これは、Hadoop 1.xとHadoop 2.xの間でorg.apache.hadoop.mapreduce.JobContext
に発生した非互換性が原因です。このエラーは、Hadoop 1.xとHadoop 2.xのどちらを基準にしてサンプルのコンパイルとビルドを行っても発生します。本製品のカスタマ・ベースで使用されているのはほとんどHadoop 2.xのみなので、このリリースではHadoop 1.xではなくHadoop 2.xをサポートしました。今後のリリースでは、Hadoopの両方のバージョン・パスが再度サポートされる可能性もありますが、その場合にはコードベースとそれに伴うリリース・アーチファクトのリファクタリングが必要となり、現在のビルド・プロセスについても大きな変更が必要になります。
Hadoop 2.x (CDH4)のサポートを追加しました。[#22157]
plan remove-admin -admin <adminId>
1つの管理インスタンスのみが構成されている場合、その唯一の管理を削除することはできません。
可用性と永続性の理由から、少なくとも3つの管理インスタンスを常に維持しておくことをお薦めします。そのため、削除の結果として3つを下回るような削除を行おうとした場合、-forceフラグを指定しないかぎりコマンドは失敗します。
現在マスターである管理を削除しようとすると、マスター権限は別の管理に移動します。プランが中断され、後から新しいマスター管理で再実行できます。中断されたプランを再実行するには、次のコマンドを使用します。
plan execute -id <planId>
show perf
コマンド、.perfファイルと.csvファイル、そして.getStatsによって返されるクライアント側統計です。ただし、95%から99%の値に対する修正はクライアント側統計には適用されません。これらの値はクライアント側APIには出現しないからです。
Op Type
列に「multi」と表記され、そこにレイテンシ情報が表示されます。以前の定義は「操作ごとのミリ秒当たりのレイテンシ」で、新しい定義は「要求ごとのミリ秒当たりのレイテンシ」です。つまり、「マルチ」操作要求の場合、レイテンシは各操作ではなく要求全体に適用されるということです。「単一」操作要求の場合、レイテンシの定義は変わっていません。
TotalReq
が、すべてのレイテンシ情報表示に追加されています。これは、クライアント側統計で新しいOperationMetrics.getTotalRequests
メソッドを使用しても利用可能です。「マルチ」操作要求の場合、要求の合計数は操作の合計数(TotalOps
列)より小さくなるのが普通です。「単一」操作要求の場合、要求の合計数と操作の合計数は等しくなります。
Exception in thread "main" com.sleepycat.je.EnvironmentFailureException: (JE 5.0.XX) ... last LSN=.../... LOG_INTEGRITY: Log information is incorrect, problem is likely persistent. Environment is invalid and must be closed. at com.sleepycat.je.recovery.RecoveryManager.traceAndThrowException(RecoveryManager.java:2793) at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1097) at com.sleepycat.je.recovery.RecoveryManager.buildTree(RecoveryManager.java:587) at com.sleepycat.je.recovery.RecoveryManager.recover(RecoveryManager.java:198) at com.sleepycat.je.dbi.EnvironmentImpl.finishInit(EnvironmentImpl.java:610) at com.sleepycat.je.dbi.DbEnvPool.getEnvironment(DbEnvPool.java:208) at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:246) at com.sleepycat.je.Environment.<init>(Environment.java:227) at com.sleepycat.je.Environment.<init>(Environment.java:170) ... Caused by: java.lang.NullPointerException at com.sleepycat.je.log.entry.LNLogEntry.postFetchInit(LNLogEntry.java:406) at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:133) at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:84) at com.sleepycat.je.recovery.RollbackTracker$RollbackPeriod.getChain(RollbackTracker.java:1004) at com.sleepycat.je.recovery.RollbackTracker$Scanner.rollback(RollbackTracker.java:477) at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1026) ... 10 more[#22052]
KVStore.storeIterator
またはKVStore.storeKeysIterator
を使用するときのみでした。[#21973]
lib/kvstore.jar lib/kvclient.jar
この変更により、JARファイルの名前がリリースごとに変わらなくなるため、新しいリリースへの切替えに要する作業負荷が減ります。インストール・ディレクトリの名前には、引き続きリリース・バージョン番号が含まれます。[#22034]
121215 13:48:57:480 SEVERE [...] Average cleaner backlog has grown from 0.0 to 6.4. If the cleaner continues to be unable to make progress, the JE cache size and/or number of cleaner threads are probably too small. If this is not corrected, eventually all available disk space will be used.キャッシュ・サイズを適切に設定してこのような問題を回避する方法の詳細は、管理者ガイドのノード当たりのキャッシュ・サイズの決定に関する項を参照してください。[#21111]
oracle.kv.lob
パッケージにより、音声ファイルや動画ファイルなどのラージ・オブジェクト(LOB)を読み書きできるようになります。一般に、1MBを超えるオブジェクトはすべてLOBとして表すことができます。LOB APIでは、このようなオブジェクトの読取りと書込みにストリーミングAPIを提供することにより、値全体をマテリアライズせずに大きな値にアクセスできます。
ストレージ・ノードが誤って構成されており、デプロイできない場合。[#20530]
ストレージ・ノードが以前はNoSQL Databaseの一部だったが、migrate-storagenodeコマンドですべてのコンポーネントがそこから移行され、ストレージ・ノードの停止が必要になった場合。
oracle.kv.avro
パッケージについては、Javadocで説明されています。Avro形式を使用することをお薦めします。今後のNoSQL DBは、追加の機能を導入するためにAvroを利用する予定です。[#21213]
KVInputFormat
クラスのサポートを追加しました。新しいoracle.kv.hadoop.KVAvroInputFormat
クラスは、AvroのIndexedRecord
をコール元に返します。このクラスをOracle Loader for Hadoopと組み合せて使用すると、HDFSにデータを格納するMap-Reduceジョブを暫定的に使用することなく、OLHを使用してNoSQL Databaseから直接データを読み込むことができます。[#21157]
oracle.kv.exttab
パッケージのJavadocと、 examples/externaltables
ディレクトリにあるcookbookサンプルを参照してください。[#20981]
KVStoreConfig.setOpenTimeout()
KVStoreConfig.getOpenTimeout()
KVStoreConfig.setReadTimeout()
KVStoreConfig.getReadTimeout()
前述のAPIをクライアントで使用するには、このリリースに付属しているアップグレード・ドキュメントの説明に従って、R1のインストールでストレージ・ノード上のソフトウェアがアップグレードされていることを確認する必要があります。[#20997]
rnRHSOBacklog
(デフォルトは1024)、rnMonitorSOBacklog
(デフォルトは0)、rnAdminSOBacklog (デフォルトは0)、rnAdminSOBacklog
(デフォルトは0)、snAdminSOBacklog
(デフォルトは0)、snMonitorSOBacklog
(デフォルトは0)およびsnRegistrySOBacklog
(デフォルトは1024)です。[#21322]
Key.isPrefix
をコールすると、特定のケースでIndexOutOfBoundsExceptionが発生していました。これは修正されました。
KeyRange()
コンストラクタは、最初のKey
が最後のKey
がより小さいかどうかをチェックします。これは最初と最後の両方が指定されている場合であり、指定されていない場合にはIllegalArgumentException
がスローされます。KeyRange
にも、KeyRange
インスタンスのエンコードとデコードに使用するtoString()
とfromString()
の2つのメソッドがあります。これはKey
の同じメソッドに似ています。[#21470]
データセンターは、#またはdc#と表せるようになります。joinPool myStorageNodePool 17 show repnode-params 5,3
上に示したコマンドは現在も有効ですが、次のように表すこともできます。
[#21099]joinPool myStorageNodePool sn17 show repnode-params rg5-rn3
Key.createKey
メソッドのJavadocが更新され、パラメータとして渡されるListインスタンスはメソッドのコール後にKeyオブジェクトによって所有されるという警告が追記されました。予期しない結果を避けるために、これは変更しないでください。[#20530]
snapshot create
コマンドの速度が大幅に向上しました。以前のバージョンでは、大量のデータがあるストアで実行すると数分間かかっていました。これが秒単位に短縮されています。[#20772]
bin/run-kvlite.sh
およびbin/kvctl
は、java -jar lib/kvstore-M.N.P.jar
コマンドに置き換えられます。これにより、Windowsを含むすべてのJavaプラットフォームの移植性が実現します。2つのスクリプトは非推奨となりましたが、少なくとも1リリース・サイクルの間はサポートされます。
古いスクリプト・コマンドから新しい-jarコマンドへの変換は、次のとおりです。
古いスクリプト・コマンド | 新しい-jarコマンド |
---|---|
bin/run-kvlite.sh args... |
java -jar lib/kvstore-M.N.P.jar kvlite args... |
bin/kvctl command args... |
java -jar lib/kvstore-M.N.P.jar command args... |
新旧のコマンドには、注意が必要な相違点がいくつかあります。
nohup
は、必要な場合には明示的に指定する必要があります。bin/kvctl
スクリプトでは、nohupは自動的にstart
およびrestart
コマンドに追加されていました。等価のコマンドを追加するには、次のコマンドを使用します。
nohup java -jar lib/kvstore-M.N.P.jar start args... > /dev/null < /dev/null 2<&1 &
kvliteのロギング構成ファイルは、標準のJava構文で指定するようになります。以前は、-logging
をrun-kvlite.sh
スクリプトに渡すとき、examples/logging.properties
構成ファイルが自動的に追加されていました。新しいコマンドで等価の構文は次のとおりです。
java -Djava.util.logging.config.file=examples/logging.properties -jar lib/kvstore-M.N.P.jar kvlite args...
以前は、kvctl
スクリプトを実行すると、-host
引数がデフォルトでローカルのマシン名(`hostname`
コマンドより)になりました。現在は、どの制御コマンドでもデフォルトのホスト名は使用されず、-host
引数を明示的に指定する必要があります。この変更には2つの理由があります。1つ目の理由は一貫性で、portと他の引数には制御コマンドのデフォルト値がありませんでした。2つ目の理由は安全性で、明示的なホスト名を指定すると偶発的なエラーの対策になります。
以前は、run-kvlite.sh
スクリプトを実行すると、-host
引数がデフォルトでlocalhost
になりました。現在は、(文字どおりの)localhost
ではなくローカル・マシン名がデフォルトです。kvliteコマンドは、制御コマンドと異なり、どの引数にもデフォルト値があります。これは、単独のマシン上での開発時にkvliteコマンドを使いやすくするためです。kvliteを、本番またはパフォーマンス・テストでは使用しないでください。
以前は、java -jar lib/kvstore-M.N.P.jar
を実行すると、引数の有無にかかわらず製品バージョンが出力されていました。現在は、引数を指定しない場合には使用方法のメッセージが出力されます。バージョンを出力する場合は、次のようにversionコマンドを使用してください。
java -jar lib/kvstore-M.N.P.jar version