This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push: new 1984a6571e Parallelizes bulk v2 import calls to tablet servers (#5375) 1984a6571e is described below commit 1984a6571e4d17ae9906faa7f107de8a8e74e263 Author: Keith Turner <ktur...@apache.org> AuthorDate: Fri Mar 28 16:54:57 2025 -0400 Parallelizes bulk v2 import calls to tablet servers (#5375) Changes the bulkv2 manager code that asks tablets servers to load files to allow parallel loading for each tablet server. The tablet servers will write to the metadata table, these changes allows more parallelism for those metadata writes. Prior to this change for each tablet server it would serially write all of it tablet metadata updates. After this change each tablet server can be working on writing metadata updates for multiple tablet concurrently. A new RPC was added for these changes. The manager code was modified to wait if a tablet server w/o the new RPC is involved in the bulk import. This will allow a 2.1.4 manager to tolerate a 2.1.3. tablet server for a short period during upgrade. Co-authored-by: Daniel Roberts <ddani...@gmail.com> --- .../org/apache/accumulo/core/conf/Property.java | 5 + .../tabletserver/thrift/TabletClientService.java | 2146 ++++++++++++++++---- core/src/main/thrift/tabletserver.thrift | 9 + .../manager/tableOps/bulkVer2/LoadFiles.java | 145 +- .../accumulo/tserver/TabletClientHandler.java | 7 + .../apache/accumulo/test/functional/BulkNewIT.java | 42 + .../accumulo/test/performance/NullTserver.java | 4 + 7 files changed, 1989 insertions(+), 369 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/conf/Property.java b/core/src/main/java/org/apache/accumulo/core/conf/Property.java index 39955d0998..49baeb08a6 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java @@ -374,6 +374,11 @@ public enum Property { "2.1.0"), MANAGER_BULK_TIMEOUT("manager.bulk.timeout", "5m", PropertyType.TIMEDURATION, "The time to wait for a tablet server to process a bulk import request.", "1.4.3"), + MANAGER_BULK_MAX_CONNECTIONS("manager.bulk.connections.max", "8", PropertyType.COUNT, + "The maximum number of connections the manager can make to a single tablet server for bulkv2 " + + "load request. For the case where a single tablet server has a lot of tablets for a bulk import " + + "increasing this may help lower the time it takes to load those tablets.", + "2.1.4"), MANAGER_RENAME_THREADS("manager.rename.threadpool.size", "20", PropertyType.COUNT, "The number of threads to use when renaming user files during table import or bulk ingest.", "2.1.0"), diff --git a/core/src/main/thrift-gen-java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java b/core/src/main/thrift-gen-java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java index 8f734f2eff..b5446c41f3 100644 --- a/core/src/main/thrift-gen-java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java +++ b/core/src/main/thrift-gen-java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java @@ -51,6 +51,8 @@ public class TabletClientService { public void loadFiles(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime) throws org.apache.thrift.TException; + public void loadFilesV2(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime) throws org.apache.thrift.TException; + public void splitTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, java.nio.ByteBuffer splitPoint) throws org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException, NotServingTabletException, org.apache.thrift.TException; public void loadTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String lock, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) throws org.apache.thrift.TException; @@ -123,6 +125,8 @@ public class TabletClientService { public void loadFiles(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException; + public void loadFilesV2(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException; + public void splitTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, java.nio.ByteBuffer splitPoint, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException; public void loadTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String lock, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException; @@ -472,6 +476,32 @@ public class TabletClientService { sendBaseOneway("loadFiles", args); } + @Override + public void loadFilesV2(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime) throws org.apache.thrift.TException + { + send_loadFilesV2(tinfo, credentials, tid, dir, files, setTime); + recv_loadFilesV2(); + } + + public void send_loadFilesV2(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime) throws org.apache.thrift.TException + { + loadFilesV2_args args = new loadFilesV2_args(); + args.setTinfo(tinfo); + args.setCredentials(credentials); + args.setTid(tid); + args.setDir(dir); + args.setFiles(files); + args.setSetTime(setTime); + sendBase("loadFilesV2", args); + } + + public void recv_loadFilesV2() throws org.apache.thrift.TException + { + loadFilesV2_result result = new loadFilesV2_result(); + receiveBase(result, "loadFilesV2"); + return; + } + @Override public void splitTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, java.nio.ByteBuffer splitPoint) throws org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException, NotServingTabletException, org.apache.thrift.TException { @@ -1509,6 +1539,57 @@ public class TabletClientService { } } + @Override + public void loadFilesV2(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + checkReady(); + loadFilesV2_call method_call = new loadFilesV2_call(tinfo, credentials, tid, dir, files, setTime, resultHandler, this, ___protocolFactory, ___transport); + this.___currentMethod = method_call; + ___manager.call(method_call); + } + + public static class loadFilesV2_call extends org.apache.thrift.async.TAsyncMethodCall<Void> { + private org.apache.accumulo.core.trace.thrift.TInfo tinfo; + private org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials; + private long tid; + private java.lang.String dir; + private java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files; + private boolean setTime; + public loadFilesV2_call(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, long tid, java.lang.String dir, java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, boolean setTime, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.prot [...] + super(client, protocolFactory, transport, resultHandler, false); + this.tinfo = tinfo; + this.credentials = credentials; + this.tid = tid; + this.dir = dir; + this.files = files; + this.setTime = setTime; + } + + @Override + public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException { + prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("loadFilesV2", org.apache.thrift.protocol.TMessageType.CALL, 0)); + loadFilesV2_args args = new loadFilesV2_args(); + args.setTinfo(tinfo); + args.setCredentials(credentials); + args.setTid(tid); + args.setDir(dir); + args.setFiles(files); + args.setSetTime(setTime); + args.write(prot); + prot.writeMessageEnd(); + } + + @Override + public Void getResult() throws org.apache.thrift.TException { + if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) { + throw new java.lang.IllegalStateException("Method call not finished!"); + } + org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array()); + org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport); + (new Client(prot)).recv_loadFilesV2(); + return null; + } + } + @Override public void splitTablet(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, java.nio.ByteBuffer splitPoint, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { checkReady(); @@ -2529,6 +2610,7 @@ public class TabletClientService { processMap.put("closeConditionalUpdate", new closeConditionalUpdate()); processMap.put("bulkImport", new bulkImport()); processMap.put("loadFiles", new loadFiles()); + processMap.put("loadFilesV2", new loadFilesV2()); processMap.put("splitTablet", new splitTablet()); processMap.put("loadTablet", new loadTablet()); processMap.put("unloadTablet", new unloadTablet()); @@ -2890,6 +2972,34 @@ public class TabletClientService { } } + public static class loadFilesV2<I extends Iface> extends org.apache.thrift.ProcessFunction<I, loadFilesV2_args> { + public loadFilesV2() { + super("loadFilesV2"); + } + + @Override + public loadFilesV2_args getEmptyArgsInstance() { + return new loadFilesV2_args(); + } + + @Override + protected boolean isOneway() { + return false; + } + + @Override + protected boolean rethrowUnhandledExceptions() { + return false; + } + + @Override + public loadFilesV2_result getResult(I iface, loadFilesV2_args args) throws org.apache.thrift.TException { + loadFilesV2_result result = new loadFilesV2_result(); + iface.loadFilesV2(args.tinfo, args.credentials, args.tid, args.dir, args.files, args.setTime); + return result; + } + } + public static class splitTablet<I extends Iface> extends org.apache.thrift.ProcessFunction<I, splitTablet_args> { public splitTablet() { super("splitTablet"); @@ -3600,6 +3710,7 @@ public class TabletClientService { processMap.put("closeConditionalUpdate", new closeConditionalUpdate()); processMap.put("bulkImport", new bulkImport()); processMap.put("loadFiles", new loadFiles()); + processMap.put("loadFilesV2", new loadFilesV2()); processMap.put("splitTablet", new splitTablet()); processMap.put("loadTablet", new loadTablet()); processMap.put("unloadTablet", new unloadTablet()); @@ -4314,14 +4425,14 @@ public class TabletClientService { } } - public static class splitTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, splitTablet_args, Void> { - public splitTablet() { - super("splitTablet"); + public static class loadFilesV2<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, loadFilesV2_args, Void> { + public loadFilesV2() { + super("loadFilesV2"); } @Override - public splitTablet_args getEmptyArgsInstance() { - return new splitTablet_args(); + public loadFilesV2_args getEmptyArgsInstance() { + return new loadFilesV2_args(); } @Override @@ -4330,7 +4441,7 @@ public class TabletClientService { return new org.apache.thrift.async.AsyncMethodCallback<Void>() { @Override public void onComplete(Void o) { - splitTablet_result result = new splitTablet_result(); + loadFilesV2_result result = new loadFilesV2_result(); try { fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid); } catch (org.apache.thrift.transport.TTransportException e) { @@ -4345,16 +4456,8 @@ public class TabletClientService { public void onError(java.lang.Exception e) { byte msgType = org.apache.thrift.protocol.TMessageType.REPLY; org.apache.thrift.TSerializable msg; - splitTablet_result result = new splitTablet_result(); - if (e instanceof org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException) { - result.sec = (org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException) e; - result.setSecIsSet(true); - msg = result; - } else if (e instanceof NotServingTabletException) { - result.nste = (NotServingTabletException) e; - result.setNsteIsSet(true); - msg = result; - } else if (e instanceof org.apache.thrift.transport.TTransportException) { + loadFilesV2_result result = new loadFilesV2_result(); + if (e instanceof org.apache.thrift.transport.TTransportException) { _LOGGER.error("TTransportException inside handler", e); fb.close(); return; @@ -4383,59 +4486,19 @@ public class TabletClientService { } @Override - public void start(I iface, splitTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.splitTablet(args.tinfo, args.credentials, args.extent, args.splitPoint,resultHandler); + public void start(I iface, loadFilesV2_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.loadFilesV2(args.tinfo, args.credentials, args.tid, args.dir, args.files, args.setTime,resultHandler); } } - public static class loadTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, loadTablet_args, Void> { - public loadTablet() { - super("loadTablet"); - } - - @Override - public loadTablet_args getEmptyArgsInstance() { - return new loadTablet_args(); - } - - @Override - public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { - final org.apache.thrift.AsyncProcessFunction fcall = this; - return new org.apache.thrift.async.AsyncMethodCallback<Void>() { - @Override - public void onComplete(Void o) { - } - @Override - public void onError(java.lang.Exception e) { - if (e instanceof org.apache.thrift.transport.TTransportException) { - _LOGGER.error("TTransportException inside handler", e); - fb.close(); - } else { - _LOGGER.error("Exception inside oneway handler", e); - } - } - }; - } - - @Override - protected boolean isOneway() { - return true; - } - - @Override - public void start(I iface, loadTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.loadTablet(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); - } - } - - public static class unloadTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, unloadTablet_args, Void> { - public unloadTablet() { - super("unloadTablet"); + public static class splitTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, splitTablet_args, Void> { + public splitTablet() { + super("splitTablet"); } @Override - public unloadTablet_args getEmptyArgsInstance() { - return new unloadTablet_args(); + public splitTablet_args getEmptyArgsInstance() { + return new splitTablet_args(); } @Override @@ -4444,94 +4507,48 @@ public class TabletClientService { return new org.apache.thrift.async.AsyncMethodCallback<Void>() { @Override public void onComplete(Void o) { - } - @Override - public void onError(java.lang.Exception e) { - if (e instanceof org.apache.thrift.transport.TTransportException) { - _LOGGER.error("TTransportException inside handler", e); + splitTablet_result result = new splitTablet_result(); + try { + fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid); + } catch (org.apache.thrift.transport.TTransportException e) { + _LOGGER.error("TTransportException writing to internal frame buffer", e); fb.close(); - } else { - _LOGGER.error("Exception inside oneway handler", e); + } catch (java.lang.Exception e) { + _LOGGER.error("Exception writing to internal frame buffer", e); + onError(e); } } - }; - } - - @Override - protected boolean isOneway() { - return true; - } - - @Override - public void start(I iface, unloadTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.unloadTablet(args.tinfo, args.credentials, args.lock, args.extent, args.goal, args.requestTime,resultHandler); - } - } - - public static class flush<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, flush_args, Void> { - public flush() { - super("flush"); - } - - @Override - public flush_args getEmptyArgsInstance() { - return new flush_args(); - } - - @Override - public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { - final org.apache.thrift.AsyncProcessFunction fcall = this; - return new org.apache.thrift.async.AsyncMethodCallback<Void>() { - @Override - public void onComplete(Void o) { - } @Override public void onError(java.lang.Exception e) { - if (e instanceof org.apache.thrift.transport.TTransportException) { + byte msgType = org.apache.thrift.protocol.TMessageType.REPLY; + org.apache.thrift.TSerializable msg; + splitTablet_result result = new splitTablet_result(); + if (e instanceof org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException) { + result.sec = (org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException) e; + result.setSecIsSet(true); + msg = result; + } else if (e instanceof NotServingTabletException) { + result.nste = (NotServingTabletException) e; + result.setNsteIsSet(true); + msg = result; + } else if (e instanceof org.apache.thrift.transport.TTransportException) { _LOGGER.error("TTransportException inside handler", e); fb.close(); + return; + } else if (e instanceof org.apache.thrift.TApplicationException) { + _LOGGER.error("TApplicationException inside handler", e); + msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; + msg = (org.apache.thrift.TApplicationException)e; } else { - _LOGGER.error("Exception inside oneway handler", e); + _LOGGER.error("Exception inside handler", e); + msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; + msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage()); } - } - }; - } - - @Override - protected boolean isOneway() { - return true; - } - - @Override - public void start(I iface, flush_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.flush(args.tinfo, args.credentials, args.lock, args.tableId, args.startRow, args.endRow,resultHandler); - } - } - - public static class flushTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, flushTablet_args, Void> { - public flushTablet() { - super("flushTablet"); - } - - @Override - public flushTablet_args getEmptyArgsInstance() { - return new flushTablet_args(); - } - - @Override - public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { - final org.apache.thrift.AsyncProcessFunction fcall = this; - return new org.apache.thrift.async.AsyncMethodCallback<Void>() { - @Override - public void onComplete(Void o) { - } - @Override - public void onError(java.lang.Exception e) { - if (e instanceof org.apache.thrift.transport.TTransportException) { - _LOGGER.error("TTransportException inside handler", e); + try { + fcall.sendResponse(fb,msg,msgType,seqid); + } catch (java.lang.Exception ex) { + _LOGGER.error("Exception writing to internal frame buffer", ex); fb.close(); - } else { - _LOGGER.error("Exception inside oneway handler", e); } } }; @@ -4539,23 +4556,23 @@ public class TabletClientService { @Override protected boolean isOneway() { - return true; + return false; } @Override - public void start(I iface, flushTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.flushTablet(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); + public void start(I iface, splitTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.splitTablet(args.tinfo, args.credentials, args.extent, args.splitPoint,resultHandler); } } - public static class chop<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, chop_args, Void> { - public chop() { - super("chop"); + public static class loadTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, loadTablet_args, Void> { + public loadTablet() { + super("loadTablet"); } @Override - public chop_args getEmptyArgsInstance() { - return new chop_args(); + public loadTablet_args getEmptyArgsInstance() { + return new loadTablet_args(); } @Override @@ -4583,19 +4600,179 @@ public class TabletClientService { } @Override - public void start(I iface, chop_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { - iface.chop(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); + public void start(I iface, loadTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.loadTablet(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); } } - public static class compact<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, compact_args, Void> { - public compact() { - super("compact"); + public static class unloadTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, unloadTablet_args, Void> { + public unloadTablet() { + super("unloadTablet"); } @Override - public compact_args getEmptyArgsInstance() { - return new compact_args(); + public unloadTablet_args getEmptyArgsInstance() { + return new unloadTablet_args(); + } + + @Override + public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { + final org.apache.thrift.AsyncProcessFunction fcall = this; + return new org.apache.thrift.async.AsyncMethodCallback<Void>() { + @Override + public void onComplete(Void o) { + } + @Override + public void onError(java.lang.Exception e) { + if (e instanceof org.apache.thrift.transport.TTransportException) { + _LOGGER.error("TTransportException inside handler", e); + fb.close(); + } else { + _LOGGER.error("Exception inside oneway handler", e); + } + } + }; + } + + @Override + protected boolean isOneway() { + return true; + } + + @Override + public void start(I iface, unloadTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.unloadTablet(args.tinfo, args.credentials, args.lock, args.extent, args.goal, args.requestTime,resultHandler); + } + } + + public static class flush<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, flush_args, Void> { + public flush() { + super("flush"); + } + + @Override + public flush_args getEmptyArgsInstance() { + return new flush_args(); + } + + @Override + public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { + final org.apache.thrift.AsyncProcessFunction fcall = this; + return new org.apache.thrift.async.AsyncMethodCallback<Void>() { + @Override + public void onComplete(Void o) { + } + @Override + public void onError(java.lang.Exception e) { + if (e instanceof org.apache.thrift.transport.TTransportException) { + _LOGGER.error("TTransportException inside handler", e); + fb.close(); + } else { + _LOGGER.error("Exception inside oneway handler", e); + } + } + }; + } + + @Override + protected boolean isOneway() { + return true; + } + + @Override + public void start(I iface, flush_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.flush(args.tinfo, args.credentials, args.lock, args.tableId, args.startRow, args.endRow,resultHandler); + } + } + + public static class flushTablet<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, flushTablet_args, Void> { + public flushTablet() { + super("flushTablet"); + } + + @Override + public flushTablet_args getEmptyArgsInstance() { + return new flushTablet_args(); + } + + @Override + public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { + final org.apache.thrift.AsyncProcessFunction fcall = this; + return new org.apache.thrift.async.AsyncMethodCallback<Void>() { + @Override + public void onComplete(Void o) { + } + @Override + public void onError(java.lang.Exception e) { + if (e instanceof org.apache.thrift.transport.TTransportException) { + _LOGGER.error("TTransportException inside handler", e); + fb.close(); + } else { + _LOGGER.error("Exception inside oneway handler", e); + } + } + }; + } + + @Override + protected boolean isOneway() { + return true; + } + + @Override + public void start(I iface, flushTablet_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.flushTablet(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); + } + } + + public static class chop<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, chop_args, Void> { + public chop() { + super("chop"); + } + + @Override + public chop_args getEmptyArgsInstance() { + return new chop_args(); + } + + @Override + public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { + final org.apache.thrift.AsyncProcessFunction fcall = this; + return new org.apache.thrift.async.AsyncMethodCallback<Void>() { + @Override + public void onComplete(Void o) { + } + @Override + public void onError(java.lang.Exception e) { + if (e instanceof org.apache.thrift.transport.TTransportException) { + _LOGGER.error("TTransportException inside handler", e); + fb.close(); + } else { + _LOGGER.error("Exception inside oneway handler", e); + } + } + }; + } + + @Override + protected boolean isOneway() { + return true; + } + + @Override + public void start(I iface, chop_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException { + iface.chop(args.tinfo, args.credentials, args.lock, args.extent,resultHandler); + } + } + + public static class compact<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, compact_args, Void> { + public compact() { + super("compact"); + } + + @Override + public compact_args getEmptyArgsInstance() { + return new compact_args(); } @Override @@ -16761,12 +16938,1030 @@ public class TabletClientService { @Override public boolean equals(java.lang.Object that) { - if (that instanceof loadFiles_args) - return this.equals((loadFiles_args)that); + if (that instanceof loadFiles_args) + return this.equals((loadFiles_args)that); + return false; + } + + public boolean equals(loadFiles_args that) { + if (that == null) + return false; + if (this == that) + return true; + + boolean this_present_tinfo = true && this.isSetTinfo(); + boolean that_present_tinfo = true && that.isSetTinfo(); + if (this_present_tinfo || that_present_tinfo) { + if (!(this_present_tinfo && that_present_tinfo)) + return false; + if (!this.tinfo.equals(that.tinfo)) + return false; + } + + boolean this_present_credentials = true && this.isSetCredentials(); + boolean that_present_credentials = true && that.isSetCredentials(); + if (this_present_credentials || that_present_credentials) { + if (!(this_present_credentials && that_present_credentials)) + return false; + if (!this.credentials.equals(that.credentials)) + return false; + } + + boolean this_present_tid = true; + boolean that_present_tid = true; + if (this_present_tid || that_present_tid) { + if (!(this_present_tid && that_present_tid)) + return false; + if (this.tid != that.tid) + return false; + } + + boolean this_present_dir = true && this.isSetDir(); + boolean that_present_dir = true && that.isSetDir(); + if (this_present_dir || that_present_dir) { + if (!(this_present_dir && that_present_dir)) + return false; + if (!this.dir.equals(that.dir)) + return false; + } + + boolean this_present_files = true && this.isSetFiles(); + boolean that_present_files = true && that.isSetFiles(); + if (this_present_files || that_present_files) { + if (!(this_present_files && that_present_files)) + return false; + if (!this.files.equals(that.files)) + return false; + } + + boolean this_present_setTime = true; + boolean that_present_setTime = true; + if (this_present_setTime || that_present_setTime) { + if (!(this_present_setTime && that_present_setTime)) + return false; + if (this.setTime != that.setTime) + return false; + } + + return true; + } + + @Override + public int hashCode() { + int hashCode = 1; + + hashCode = hashCode * 8191 + ((isSetTinfo()) ? 131071 : 524287); + if (isSetTinfo()) + hashCode = hashCode * 8191 + tinfo.hashCode(); + + hashCode = hashCode * 8191 + ((isSetCredentials()) ? 131071 : 524287); + if (isSetCredentials()) + hashCode = hashCode * 8191 + credentials.hashCode(); + + hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(tid); + + hashCode = hashCode * 8191 + ((isSetDir()) ? 131071 : 524287); + if (isSetDir()) + hashCode = hashCode * 8191 + dir.hashCode(); + + hashCode = hashCode * 8191 + ((isSetFiles()) ? 131071 : 524287); + if (isSetFiles()) + hashCode = hashCode * 8191 + files.hashCode(); + + hashCode = hashCode * 8191 + ((setTime) ? 131071 : 524287); + + return hashCode; + } + + @Override + public int compareTo(loadFiles_args other) { + if (!getClass().equals(other.getClass())) { + return getClass().getName().compareTo(other.getClass().getName()); + } + + int lastComparison = 0; + + lastComparison = java.lang.Boolean.compare(isSetTinfo(), other.isSetTinfo()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetTinfo()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tinfo, other.tinfo); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = java.lang.Boolean.compare(isSetCredentials(), other.isSetCredentials()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetCredentials()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.credentials, other.credentials); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = java.lang.Boolean.compare(isSetTid(), other.isSetTid()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetTid()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tid, other.tid); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = java.lang.Boolean.compare(isSetDir(), other.isSetDir()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetDir()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.dir, other.dir); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = java.lang.Boolean.compare(isSetFiles(), other.isSetFiles()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetFiles()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.files, other.files); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = java.lang.Boolean.compare(isSetSetTime(), other.isSetSetTime()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetSetTime()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.setTime, other.setTime); + if (lastComparison != 0) { + return lastComparison; + } + } + return 0; + } + + @org.apache.thrift.annotation.Nullable + @Override + public _Fields fieldForId(int fieldId) { + return _Fields.findByThriftId(fieldId); + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { + scheme(iprot).read(iprot, this); + } + + @Override + public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { + scheme(oprot).write(oprot, this); + } + + @Override + public java.lang.String toString() { + java.lang.StringBuilder sb = new java.lang.StringBuilder("loadFiles_args("); + boolean first = true; + + sb.append("tinfo:"); + if (this.tinfo == null) { + sb.append("null"); + } else { + sb.append(this.tinfo); + } + first = false; + if (!first) sb.append(", "); + sb.append("credentials:"); + if (this.credentials == null) { + sb.append("null"); + } else { + sb.append(this.credentials); + } + first = false; + if (!first) sb.append(", "); + sb.append("tid:"); + sb.append(this.tid); + first = false; + if (!first) sb.append(", "); + sb.append("dir:"); + if (this.dir == null) { + sb.append("null"); + } else { + sb.append(this.dir); + } + first = false; + if (!first) sb.append(", "); + sb.append("files:"); + if (this.files == null) { + sb.append("null"); + } else { + sb.append(this.files); + } + first = false; + if (!first) sb.append(", "); + sb.append("setTime:"); + sb.append(this.setTime); + first = false; + sb.append(")"); + return sb.toString(); + } + + public void validate() throws org.apache.thrift.TException { + // check for required fields + // check for sub-struct validity + if (tinfo != null) { + tinfo.validate(); + } + if (credentials != null) { + credentials.validate(); + } + } + + private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { + try { + write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { + try { + // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor. + __isset_bitfield = 0; + read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private static class loadFiles_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + @Override + public loadFiles_argsStandardScheme getScheme() { + return new loadFiles_argsStandardScheme(); + } + } + + private static class loadFiles_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<loadFiles_args> { + + @Override + public void read(org.apache.thrift.protocol.TProtocol iprot, loadFiles_args struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TField schemeField; + iprot.readStructBegin(); + while (true) + { + schemeField = iprot.readFieldBegin(); + if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { + break; + } + switch (schemeField.id) { + case 1: // TINFO + if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) { + struct.tinfo = new org.apache.accumulo.core.trace.thrift.TInfo(); + struct.tinfo.read(iprot); + struct.setTinfoIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 2: // CREDENTIALS + if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) { + struct.credentials = new org.apache.accumulo.core.securityImpl.thrift.TCredentials(); + struct.credentials.read(iprot); + struct.setCredentialsIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 3: // TID + if (schemeField.type == org.apache.thrift.protocol.TType.I64) { + struct.tid = iprot.readI64(); + struct.setTidIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 4: // DIR + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.dir = iprot.readString(); + struct.setDirIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 5: // FILES + if (schemeField.type == org.apache.thrift.protocol.TType.MAP) { + { + org.apache.thrift.protocol.TMap _map346 = iprot.readMapBegin(); + struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map346.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key347; + @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val348; + for (int _i349 = 0; _i349 < _map346.size; ++_i349) + { + _key347 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); + _key347.read(iprot); + { + org.apache.thrift.protocol.TMap _map350 = iprot.readMapBegin(); + _val348 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map350.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key351; + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val352; + for (int _i353 = 0; _i353 < _map350.size; ++_i353) + { + _key351 = iprot.readString(); + _val352 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); + _val352.read(iprot); + _val348.put(_key351, _val352); + } + iprot.readMapEnd(); + } + struct.files.put(_key347, _val348); + } + iprot.readMapEnd(); + } + struct.setFilesIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 6: // SET_TIME + if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) { + struct.setTime = iprot.readBool(); + struct.setSetTimeIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + default: + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + iprot.readFieldEnd(); + } + iprot.readStructEnd(); + + // check for required fields of primitive type, which can't be checked in the validate method + struct.validate(); + } + + @Override + public void write(org.apache.thrift.protocol.TProtocol oprot, loadFiles_args struct) throws org.apache.thrift.TException { + struct.validate(); + + oprot.writeStructBegin(STRUCT_DESC); + if (struct.tinfo != null) { + oprot.writeFieldBegin(TINFO_FIELD_DESC); + struct.tinfo.write(oprot); + oprot.writeFieldEnd(); + } + if (struct.credentials != null) { + oprot.writeFieldBegin(CREDENTIALS_FIELD_DESC); + struct.credentials.write(oprot); + oprot.writeFieldEnd(); + } + oprot.writeFieldBegin(TID_FIELD_DESC); + oprot.writeI64(struct.tid); + oprot.writeFieldEnd(); + if (struct.dir != null) { + oprot.writeFieldBegin(DIR_FIELD_DESC); + oprot.writeString(struct.dir); + oprot.writeFieldEnd(); + } + if (struct.files != null) { + oprot.writeFieldBegin(FILES_FIELD_DESC); + { + oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP, struct.files.size())); + for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter354 : struct.files.entrySet()) + { + _iter354.getKey().write(oprot); + { + oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter354.getValue().size())); + for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter355 : _iter354.getValue().entrySet()) + { + oprot.writeString(_iter355.getKey()); + _iter355.getValue().write(oprot); + } + oprot.writeMapEnd(); + } + } + oprot.writeMapEnd(); + } + oprot.writeFieldEnd(); + } + oprot.writeFieldBegin(SET_TIME_FIELD_DESC); + oprot.writeBool(struct.setTime); + oprot.writeFieldEnd(); + oprot.writeFieldStop(); + oprot.writeStructEnd(); + } + + } + + private static class loadFiles_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + @Override + public loadFiles_argsTupleScheme getScheme() { + return new loadFiles_argsTupleScheme(); + } + } + + private static class loadFiles_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<loadFiles_args> { + + @Override + public void write(org.apache.thrift.protocol.TProtocol prot, loadFiles_args struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; + java.util.BitSet optionals = new java.util.BitSet(); + if (struct.isSetTinfo()) { + optionals.set(0); + } + if (struct.isSetCredentials()) { + optionals.set(1); + } + if (struct.isSetTid()) { + optionals.set(2); + } + if (struct.isSetDir()) { + optionals.set(3); + } + if (struct.isSetFiles()) { + optionals.set(4); + } + if (struct.isSetSetTime()) { + optionals.set(5); + } + oprot.writeBitSet(optionals, 6); + if (struct.isSetTinfo()) { + struct.tinfo.write(oprot); + } + if (struct.isSetCredentials()) { + struct.credentials.write(oprot); + } + if (struct.isSetTid()) { + oprot.writeI64(struct.tid); + } + if (struct.isSetDir()) { + oprot.writeString(struct.dir); + } + if (struct.isSetFiles()) { + { + oprot.writeI32(struct.files.size()); + for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter356 : struct.files.entrySet()) + { + _iter356.getKey().write(oprot); + { + oprot.writeI32(_iter356.getValue().size()); + for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter357 : _iter356.getValue().entrySet()) + { + oprot.writeString(_iter357.getKey()); + _iter357.getValue().write(oprot); + } + } + } + } + } + if (struct.isSetSetTime()) { + oprot.writeBool(struct.setTime); + } + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol prot, loadFiles_args struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; + java.util.BitSet incoming = iprot.readBitSet(6); + if (incoming.get(0)) { + struct.tinfo = new org.apache.accumulo.core.trace.thrift.TInfo(); + struct.tinfo.read(iprot); + struct.setTinfoIsSet(true); + } + if (incoming.get(1)) { + struct.credentials = new org.apache.accumulo.core.securityImpl.thrift.TCredentials(); + struct.credentials.read(iprot); + struct.setCredentialsIsSet(true); + } + if (incoming.get(2)) { + struct.tid = iprot.readI64(); + struct.setTidIsSet(true); + } + if (incoming.get(3)) { + struct.dir = iprot.readString(); + struct.setDirIsSet(true); + } + if (incoming.get(4)) { + { + org.apache.thrift.protocol.TMap _map358 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP); + struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map358.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key359; + @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val360; + for (int _i361 = 0; _i361 < _map358.size; ++_i361) + { + _key359 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); + _key359.read(iprot); + { + org.apache.thrift.protocol.TMap _map362 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT); + _val360 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map362.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key363; + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val364; + for (int _i365 = 0; _i365 < _map362.size; ++_i365) + { + _key363 = iprot.readString(); + _val364 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); + _val364.read(iprot); + _val360.put(_key363, _val364); + } + } + struct.files.put(_key359, _val360); + } + } + struct.setFilesIsSet(true); + } + if (incoming.get(5)) { + struct.setTime = iprot.readBool(); + struct.setSetTimeIsSet(true); + } + } + } + + private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) { + return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); + } + } + + @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"}) + public static class loadFilesV2_args implements org.apache.thrift.TBase<loadFilesV2_args, loadFilesV2_args._Fields>, java.io.Serializable, Cloneable, Comparable<loadFilesV2_args> { + private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("loadFilesV2_args"); + + private static final org.apache.thrift.protocol.TField TINFO_FIELD_DESC = new org.apache.thrift.protocol.TField("tinfo", org.apache.thrift.protocol.TType.STRUCT, (short)1); + private static final org.apache.thrift.protocol.TField CREDENTIALS_FIELD_DESC = new org.apache.thrift.protocol.TField("credentials", org.apache.thrift.protocol.TType.STRUCT, (short)2); + private static final org.apache.thrift.protocol.TField TID_FIELD_DESC = new org.apache.thrift.protocol.TField("tid", org.apache.thrift.protocol.TType.I64, (short)3); + private static final org.apache.thrift.protocol.TField DIR_FIELD_DESC = new org.apache.thrift.protocol.TField("dir", org.apache.thrift.protocol.TType.STRING, (short)4); + private static final org.apache.thrift.protocol.TField FILES_FIELD_DESC = new org.apache.thrift.protocol.TField("files", org.apache.thrift.protocol.TType.MAP, (short)5); + private static final org.apache.thrift.protocol.TField SET_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("setTime", org.apache.thrift.protocol.TType.BOOL, (short)6); + + private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new loadFilesV2_argsStandardSchemeFactory(); + private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new loadFilesV2_argsTupleSchemeFactory(); + + public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.trace.thrift.TInfo tinfo; // required + public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials; // required + public long tid; // required + public @org.apache.thrift.annotation.Nullable java.lang.String dir; // required + public @org.apache.thrift.annotation.Nullable java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files; // required + public boolean setTime; // required + + /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ + public enum _Fields implements org.apache.thrift.TFieldIdEnum { + TINFO((short)1, "tinfo"), + CREDENTIALS((short)2, "credentials"), + TID((short)3, "tid"), + DIR((short)4, "dir"), + FILES((short)5, "files"), + SET_TIME((short)6, "setTime"); + + private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>(); + + static { + for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { + byName.put(field.getFieldName(), field); + } + } + + /** + * Find the _Fields constant that matches fieldId, or null if its not found. + */ + @org.apache.thrift.annotation.Nullable + public static _Fields findByThriftId(int fieldId) { + switch(fieldId) { + case 1: // TINFO + return TINFO; + case 2: // CREDENTIALS + return CREDENTIALS; + case 3: // TID + return TID; + case 4: // DIR + return DIR; + case 5: // FILES + return FILES; + case 6: // SET_TIME + return SET_TIME; + default: + return null; + } + } + + /** + * Find the _Fields constant that matches fieldId, throwing an exception + * if it is not found. + */ + public static _Fields findByThriftIdOrThrow(int fieldId) { + _Fields fields = findByThriftId(fieldId); + if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); + return fields; + } + + /** + * Find the _Fields constant that matches name, or null if its not found. + */ + @org.apache.thrift.annotation.Nullable + public static _Fields findByName(java.lang.String name) { + return byName.get(name); + } + + private final short _thriftId; + private final java.lang.String _fieldName; + + _Fields(short thriftId, java.lang.String fieldName) { + _thriftId = thriftId; + _fieldName = fieldName; + } + + @Override + public short getThriftFieldId() { + return _thriftId; + } + + @Override + public java.lang.String getFieldName() { + return _fieldName; + } + } + + // isset id assignments + private static final int __TID_ISSET_ID = 0; + private static final int __SETTIME_ISSET_ID = 1; + private byte __isset_bitfield = 0; + public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; + static { + java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); + tmpMap.put(_Fields.TINFO, new org.apache.thrift.meta_data.FieldMetaData("tinfo", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.trace.thrift.TInfo.class))); + tmpMap.put(_Fields.CREDENTIALS, new org.apache.thrift.meta_data.FieldMetaData("credentials", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.securityImpl.thrift.TCredentials.class))); + tmpMap.put(_Fields.TID, new org.apache.thrift.meta_data.FieldMetaData("tid", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64))); + tmpMap.put(_Fields.DIR, new org.apache.thrift.meta_data.FieldMetaData("dir", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + tmpMap.put(_Fields.FILES, new org.apache.thrift.meta_data.FieldMetaData("files", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, + new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent.class), + new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), + new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo.class))))); + tmpMap.put(_Fields.SET_TIME, new org.apache.thrift.meta_data.FieldMetaData("setTime", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL))); + metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); + org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(loadFilesV2_args.class, metaDataMap); + } + + public loadFilesV2_args() { + } + + public loadFilesV2_args( + org.apache.accumulo.core.trace.thrift.TInfo tinfo, + org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, + long tid, + java.lang.String dir, + java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files, + boolean setTime) + { + this(); + this.tinfo = tinfo; + this.credentials = credentials; + this.tid = tid; + setTidIsSet(true); + this.dir = dir; + this.files = files; + this.setTime = setTime; + setSetTimeIsSet(true); + } + + /** + * Performs a deep copy on <i>other</i>. + */ + public loadFilesV2_args(loadFilesV2_args other) { + __isset_bitfield = other.__isset_bitfield; + if (other.isSetTinfo()) { + this.tinfo = new org.apache.accumulo.core.trace.thrift.TInfo(other.tinfo); + } + if (other.isSetCredentials()) { + this.credentials = new org.apache.accumulo.core.securityImpl.thrift.TCredentials(other.credentials); + } + this.tid = other.tid; + if (other.isSetDir()) { + this.dir = other.dir; + } + if (other.isSetFiles()) { + java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> __this__files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(other.files.size()); + for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> other_element : other.files.entrySet()) { + + org.apache.accumulo.core.dataImpl.thrift.TKeyExtent other_element_key = other_element.getKey(); + java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> other_element_value = other_element.getValue(); + + org.apache.accumulo.core.dataImpl.thrift.TKeyExtent __this__files_copy_key = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(other_element_key); + + java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> __this__files_copy_value = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(other_element_value.size()); + for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> other_element_value_element : other_element_value.entrySet()) { + + java.lang.String other_element_value_element_key = other_element_value_element.getKey(); + org.apache.accumulo.core.dataImpl.thrift.MapFileInfo other_element_value_element_value = other_element_value_element.getValue(); + + java.lang.String __this__files_copy_value_copy_key = other_element_value_element_key; + + org.apache.accumulo.core.dataImpl.thrift.MapFileInfo __this__files_copy_value_copy_value = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(other_element_value_element_value); + + __this__files_copy_value.put(__this__files_copy_value_copy_key, __this__files_copy_value_copy_value); + } + + __this__files.put(__this__files_copy_key, __this__files_copy_value); + } + this.files = __this__files; + } + this.setTime = other.setTime; + } + + @Override + public loadFilesV2_args deepCopy() { + return new loadFilesV2_args(this); + } + + @Override + public void clear() { + this.tinfo = null; + this.credentials = null; + setTidIsSet(false); + this.tid = 0; + this.dir = null; + this.files = null; + setSetTimeIsSet(false); + this.setTime = false; + } + + @org.apache.thrift.annotation.Nullable + public org.apache.accumulo.core.trace.thrift.TInfo getTinfo() { + return this.tinfo; + } + + public loadFilesV2_args setTinfo(@org.apache.thrift.annotation.Nullable org.apache.accumulo.core.trace.thrift.TInfo tinfo) { + this.tinfo = tinfo; + return this; + } + + public void unsetTinfo() { + this.tinfo = null; + } + + /** Returns true if field tinfo is set (has been assigned a value) and false otherwise */ + public boolean isSetTinfo() { + return this.tinfo != null; + } + + public void setTinfoIsSet(boolean value) { + if (!value) { + this.tinfo = null; + } + } + + @org.apache.thrift.annotation.Nullable + public org.apache.accumulo.core.securityImpl.thrift.TCredentials getCredentials() { + return this.credentials; + } + + public loadFilesV2_args setCredentials(@org.apache.thrift.annotation.Nullable org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials) { + this.credentials = credentials; + return this; + } + + public void unsetCredentials() { + this.credentials = null; + } + + /** Returns true if field credentials is set (has been assigned a value) and false otherwise */ + public boolean isSetCredentials() { + return this.credentials != null; + } + + public void setCredentialsIsSet(boolean value) { + if (!value) { + this.credentials = null; + } + } + + public long getTid() { + return this.tid; + } + + public loadFilesV2_args setTid(long tid) { + this.tid = tid; + setTidIsSet(true); + return this; + } + + public void unsetTid() { + __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __TID_ISSET_ID); + } + + /** Returns true if field tid is set (has been assigned a value) and false otherwise */ + public boolean isSetTid() { + return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __TID_ISSET_ID); + } + + public void setTidIsSet(boolean value) { + __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __TID_ISSET_ID, value); + } + + @org.apache.thrift.annotation.Nullable + public java.lang.String getDir() { + return this.dir; + } + + public loadFilesV2_args setDir(@org.apache.thrift.annotation.Nullable java.lang.String dir) { + this.dir = dir; + return this; + } + + public void unsetDir() { + this.dir = null; + } + + /** Returns true if field dir is set (has been assigned a value) and false otherwise */ + public boolean isSetDir() { + return this.dir != null; + } + + public void setDirIsSet(boolean value) { + if (!value) { + this.dir = null; + } + } + + public int getFilesSize() { + return (this.files == null) ? 0 : this.files.size(); + } + + public void putToFiles(org.apache.accumulo.core.dataImpl.thrift.TKeyExtent key, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> val) { + if (this.files == null) { + this.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(); + } + this.files.put(key, val); + } + + @org.apache.thrift.annotation.Nullable + public java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> getFiles() { + return this.files; + } + + public loadFilesV2_args setFiles(@org.apache.thrift.annotation.Nullable java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> files) { + this.files = files; + return this; + } + + public void unsetFiles() { + this.files = null; + } + + /** Returns true if field files is set (has been assigned a value) and false otherwise */ + public boolean isSetFiles() { + return this.files != null; + } + + public void setFilesIsSet(boolean value) { + if (!value) { + this.files = null; + } + } + + public boolean isSetTime() { + return this.setTime; + } + + public loadFilesV2_args setSetTime(boolean setTime) { + this.setTime = setTime; + setSetTimeIsSet(true); + return this; + } + + public void unsetSetTime() { + __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SETTIME_ISSET_ID); + } + + /** Returns true if field setTime is set (has been assigned a value) and false otherwise */ + public boolean isSetSetTime() { + return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SETTIME_ISSET_ID); + } + + public void setSetTimeIsSet(boolean value) { + __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SETTIME_ISSET_ID, value); + } + + @Override + public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { + switch (field) { + case TINFO: + if (value == null) { + unsetTinfo(); + } else { + setTinfo((org.apache.accumulo.core.trace.thrift.TInfo)value); + } + break; + + case CREDENTIALS: + if (value == null) { + unsetCredentials(); + } else { + setCredentials((org.apache.accumulo.core.securityImpl.thrift.TCredentials)value); + } + break; + + case TID: + if (value == null) { + unsetTid(); + } else { + setTid((java.lang.Long)value); + } + break; + + case DIR: + if (value == null) { + unsetDir(); + } else { + setDir((java.lang.String)value); + } + break; + + case FILES: + if (value == null) { + unsetFiles(); + } else { + setFiles((java.util.Map<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>)value); + } + break; + + case SET_TIME: + if (value == null) { + unsetSetTime(); + } else { + setSetTime((java.lang.Boolean)value); + } + break; + + } + } + + @org.apache.thrift.annotation.Nullable + @Override + public java.lang.Object getFieldValue(_Fields field) { + switch (field) { + case TINFO: + return getTinfo(); + + case CREDENTIALS: + return getCredentials(); + + case TID: + return getTid(); + + case DIR: + return getDir(); + + case FILES: + return getFiles(); + + case SET_TIME: + return isSetTime(); + + } + throw new java.lang.IllegalStateException(); + } + + /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ + @Override + public boolean isSet(_Fields field) { + if (field == null) { + throw new java.lang.IllegalArgumentException(); + } + + switch (field) { + case TINFO: + return isSetTinfo(); + case CREDENTIALS: + return isSetCredentials(); + case TID: + return isSetTid(); + case DIR: + return isSetDir(); + case FILES: + return isSetFiles(); + case SET_TIME: + return isSetSetTime(); + } + throw new java.lang.IllegalStateException(); + } + + @Override + public boolean equals(java.lang.Object that) { + if (that instanceof loadFilesV2_args) + return this.equals((loadFilesV2_args)that); return false; } - public boolean equals(loadFiles_args that) { + public boolean equals(loadFilesV2_args that) { if (that == null) return false; if (this == that) @@ -16857,7 +18052,7 @@ public class TabletClientService { } @Override - public int compareTo(loadFiles_args other) { + public int compareTo(loadFilesV2_args other) { if (!getClass().equals(other.getClass())) { return getClass().getName().compareTo(other.getClass().getName()); } @@ -16945,7 +18140,7 @@ public class TabletClientService { @Override public java.lang.String toString() { - java.lang.StringBuilder sb = new java.lang.StringBuilder("loadFiles_args("); + java.lang.StringBuilder sb = new java.lang.StringBuilder("loadFilesV2_args("); boolean first = true; sb.append("tinfo:"); @@ -17020,17 +18215,17 @@ public class TabletClientService { } } - private static class loadFiles_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + private static class loadFilesV2_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { @Override - public loadFiles_argsStandardScheme getScheme() { - return new loadFiles_argsStandardScheme(); + public loadFilesV2_argsStandardScheme getScheme() { + return new loadFilesV2_argsStandardScheme(); } } - private static class loadFiles_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<loadFiles_args> { + private static class loadFilesV2_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<loadFilesV2_args> { @Override - public void read(org.apache.thrift.protocol.TProtocol iprot, loadFiles_args struct) throws org.apache.thrift.TException { + public void read(org.apache.thrift.protocol.TProtocol iprot, loadFilesV2_args struct) throws org.apache.thrift.TException { org.apache.thrift.protocol.TField schemeField; iprot.readStructBegin(); while (true) @@ -17077,29 +18272,29 @@ public class TabletClientService { case 5: // FILES if (schemeField.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map346 = iprot.readMapBegin(); - struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map346.size); - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key347; - @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val348; - for (int _i349 = 0; _i349 < _map346.size; ++_i349) + org.apache.thrift.protocol.TMap _map366 = iprot.readMapBegin(); + struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map366.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key367; + @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val368; + for (int _i369 = 0; _i369 < _map366.size; ++_i369) { - _key347 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); - _key347.read(iprot); + _key367 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); + _key367.read(iprot); { - org.apache.thrift.protocol.TMap _map350 = iprot.readMapBegin(); - _val348 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map350.size); - @org.apache.thrift.annotation.Nullable java.lang.String _key351; - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val352; - for (int _i353 = 0; _i353 < _map350.size; ++_i353) + org.apache.thrift.protocol.TMap _map370 = iprot.readMapBegin(); + _val368 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map370.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key371; + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val372; + for (int _i373 = 0; _i373 < _map370.size; ++_i373) { - _key351 = iprot.readString(); - _val352 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); - _val352.read(iprot); - _val348.put(_key351, _val352); + _key371 = iprot.readString(); + _val372 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); + _val372.read(iprot); + _val368.put(_key371, _val372); } iprot.readMapEnd(); } - struct.files.put(_key347, _val348); + struct.files.put(_key367, _val368); } iprot.readMapEnd(); } @@ -17128,7 +18323,7 @@ public class TabletClientService { } @Override - public void write(org.apache.thrift.protocol.TProtocol oprot, loadFiles_args struct) throws org.apache.thrift.TException { + public void write(org.apache.thrift.protocol.TProtocol oprot, loadFilesV2_args struct) throws org.apache.thrift.TException { struct.validate(); oprot.writeStructBegin(STRUCT_DESC); @@ -17154,15 +18349,15 @@ public class TabletClientService { oprot.writeFieldBegin(FILES_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP, struct.files.size())); - for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter354 : struct.files.entrySet()) + for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter374 : struct.files.entrySet()) { - _iter354.getKey().write(oprot); + _iter374.getKey().write(oprot); { - oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter354.getValue().size())); - for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter355 : _iter354.getValue().entrySet()) + oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter374.getValue().size())); + for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter375 : _iter374.getValue().entrySet()) { - oprot.writeString(_iter355.getKey()); - _iter355.getValue().write(oprot); + oprot.writeString(_iter375.getKey()); + _iter375.getValue().write(oprot); } oprot.writeMapEnd(); } @@ -17180,17 +18375,17 @@ public class TabletClientService { } - private static class loadFiles_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + private static class loadFilesV2_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { @Override - public loadFiles_argsTupleScheme getScheme() { - return new loadFiles_argsTupleScheme(); + public loadFilesV2_argsTupleScheme getScheme() { + return new loadFilesV2_argsTupleScheme(); } } - private static class loadFiles_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<loadFiles_args> { + private static class loadFilesV2_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<loadFilesV2_args> { @Override - public void write(org.apache.thrift.protocol.TProtocol prot, loadFiles_args struct) throws org.apache.thrift.TException { + public void write(org.apache.thrift.protocol.TProtocol prot, loadFilesV2_args struct) throws org.apache.thrift.TException { org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; java.util.BitSet optionals = new java.util.BitSet(); if (struct.isSetTinfo()) { @@ -17227,15 +18422,15 @@ public class TabletClientService { if (struct.isSetFiles()) { { oprot.writeI32(struct.files.size()); - for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter356 : struct.files.entrySet()) + for (java.util.Map.Entry<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent, java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>> _iter376 : struct.files.entrySet()) { - _iter356.getKey().write(oprot); + _iter376.getKey().write(oprot); { - oprot.writeI32(_iter356.getValue().size()); - for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter357 : _iter356.getValue().entrySet()) + oprot.writeI32(_iter376.getValue().size()); + for (java.util.Map.Entry<java.lang.String, org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _iter377 : _iter376.getValue().entrySet()) { - oprot.writeString(_iter357.getKey()); - _iter357.getValue().write(oprot); + oprot.writeString(_iter377.getKey()); + _iter377.getValue().write(oprot); } } } @@ -17247,7 +18442,7 @@ public class TabletClientService { } @Override - public void read(org.apache.thrift.protocol.TProtocol prot, loadFiles_args struct) throws org.apache.thrift.TException { + public void read(org.apache.thrift.protocol.TProtocol prot, loadFilesV2_args struct) throws org.apache.thrift.TException { org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; java.util.BitSet incoming = iprot.readBitSet(6); if (incoming.get(0)) { @@ -17270,28 +18465,28 @@ public class TabletClientService { } if (incoming.get(4)) { { - org.apache.thrift.protocol.TMap _map358 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP); - struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map358.size); - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key359; - @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val360; - for (int _i361 = 0; _i361 < _map358.size; ++_i361) + org.apache.thrift.protocol.TMap _map378 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP); + struct.files = new java.util.HashMap<org.apache.accumulo.core.dataImpl.thrift.TKeyExtent,java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>>(2*_map378.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent _key379; + @org.apache.thrift.annotation.Nullable java.util.Map<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo> _val380; + for (int _i381 = 0; _i381 < _map378.size; ++_i381) { - _key359 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); - _key359.read(iprot); + _key379 = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(); + _key379.read(iprot); { - org.apache.thrift.protocol.TMap _map362 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT); - _val360 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map362.size); - @org.apache.thrift.annotation.Nullable java.lang.String _key363; - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val364; - for (int _i365 = 0; _i365 < _map362.size; ++_i365) + org.apache.thrift.protocol.TMap _map382 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT); + _val380 = new java.util.HashMap<java.lang.String,org.apache.accumulo.core.dataImpl.thrift.MapFileInfo>(2*_map382.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key383; + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.MapFileInfo _val384; + for (int _i385 = 0; _i385 < _map382.size; ++_i385) { - _key363 = iprot.readString(); - _val364 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); - _val364.read(iprot); - _val360.put(_key363, _val364); + _key383 = iprot.readString(); + _val384 = new org.apache.accumulo.core.dataImpl.thrift.MapFileInfo(); + _val384.read(iprot); + _val380.put(_key383, _val384); } } - struct.files.put(_key359, _val360); + struct.files.put(_key379, _val380); } } struct.setFilesIsSet(true); @@ -17308,6 +18503,271 @@ public class TabletClientService { } } + @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"}) + public static class loadFilesV2_result implements org.apache.thrift.TBase<loadFilesV2_result, loadFilesV2_result._Fields>, java.io.Serializable, Cloneable, Comparable<loadFilesV2_result> { + private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("loadFilesV2_result"); + + + private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new loadFilesV2_resultStandardSchemeFactory(); + private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new loadFilesV2_resultTupleSchemeFactory(); + + + /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ + public enum _Fields implements org.apache.thrift.TFieldIdEnum { +; + + private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>(); + + static { + for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { + byName.put(field.getFieldName(), field); + } + } + + /** + * Find the _Fields constant that matches fieldId, or null if its not found. + */ + @org.apache.thrift.annotation.Nullable + public static _Fields findByThriftId(int fieldId) { + switch(fieldId) { + default: + return null; + } + } + + /** + * Find the _Fields constant that matches fieldId, throwing an exception + * if it is not found. + */ + public static _Fields findByThriftIdOrThrow(int fieldId) { + _Fields fields = findByThriftId(fieldId); + if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); + return fields; + } + + /** + * Find the _Fields constant that matches name, or null if its not found. + */ + @org.apache.thrift.annotation.Nullable + public static _Fields findByName(java.lang.String name) { + return byName.get(name); + } + + private final short _thriftId; + private final java.lang.String _fieldName; + + _Fields(short thriftId, java.lang.String fieldName) { + _thriftId = thriftId; + _fieldName = fieldName; + } + + @Override + public short getThriftFieldId() { + return _thriftId; + } + + @Override + public java.lang.String getFieldName() { + return _fieldName; + } + } + public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; + static { + java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); + metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); + org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(loadFilesV2_result.class, metaDataMap); + } + + public loadFilesV2_result() { + } + + /** + * Performs a deep copy on <i>other</i>. + */ + public loadFilesV2_result(loadFilesV2_result other) { + } + + @Override + public loadFilesV2_result deepCopy() { + return new loadFilesV2_result(this); + } + + @Override + public void clear() { + } + + @Override + public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { + switch (field) { + } + } + + @org.apache.thrift.annotation.Nullable + @Override + public java.lang.Object getFieldValue(_Fields field) { + switch (field) { + } + throw new java.lang.IllegalStateException(); + } + + /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ + @Override + public boolean isSet(_Fields field) { + if (field == null) { + throw new java.lang.IllegalArgumentException(); + } + + switch (field) { + } + throw new java.lang.IllegalStateException(); + } + + @Override + public boolean equals(java.lang.Object that) { + if (that instanceof loadFilesV2_result) + return this.equals((loadFilesV2_result)that); + return false; + } + + public boolean equals(loadFilesV2_result that) { + if (that == null) + return false; + if (this == that) + return true; + + return true; + } + + @Override + public int hashCode() { + int hashCode = 1; + + return hashCode; + } + + @Override + public int compareTo(loadFilesV2_result other) { + if (!getClass().equals(other.getClass())) { + return getClass().getName().compareTo(other.getClass().getName()); + } + + int lastComparison = 0; + + return 0; + } + + @org.apache.thrift.annotation.Nullable + @Override + public _Fields fieldForId(int fieldId) { + return _Fields.findByThriftId(fieldId); + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { + scheme(iprot).read(iprot, this); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { + scheme(oprot).write(oprot, this); + } + + @Override + public java.lang.String toString() { + java.lang.StringBuilder sb = new java.lang.StringBuilder("loadFilesV2_result("); + boolean first = true; + + sb.append(")"); + return sb.toString(); + } + + public void validate() throws org.apache.thrift.TException { + // check for required fields + // check for sub-struct validity + } + + private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { + try { + write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { + try { + read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private static class loadFilesV2_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + @Override + public loadFilesV2_resultStandardScheme getScheme() { + return new loadFilesV2_resultStandardScheme(); + } + } + + private static class loadFilesV2_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<loadFilesV2_result> { + + @Override + public void read(org.apache.thrift.protocol.TProtocol iprot, loadFilesV2_result struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TField schemeField; + iprot.readStructBegin(); + while (true) + { + schemeField = iprot.readFieldBegin(); + if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { + break; + } + switch (schemeField.id) { + default: + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + iprot.readFieldEnd(); + } + iprot.readStructEnd(); + + // check for required fields of primitive type, which can't be checked in the validate method + struct.validate(); + } + + @Override + public void write(org.apache.thrift.protocol.TProtocol oprot, loadFilesV2_result struct) throws org.apache.thrift.TException { + struct.validate(); + + oprot.writeStructBegin(STRUCT_DESC); + oprot.writeFieldStop(); + oprot.writeStructEnd(); + } + + } + + private static class loadFilesV2_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { + @Override + public loadFilesV2_resultTupleScheme getScheme() { + return new loadFilesV2_resultTupleScheme(); + } + } + + private static class loadFilesV2_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<loadFilesV2_result> { + + @Override + public void write(org.apache.thrift.protocol.TProtocol prot, loadFilesV2_result struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol prot, loadFilesV2_result struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; + } + } + + private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) { + return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); + } + } + @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"}) public static class splitTablet_args implements org.apache.thrift.TBase<splitTablet_args, splitTablet_args._Fields>, java.io.Serializable, Cloneable, Comparable<splitTablet_args> { private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("splitTablet_args"); @@ -25448,14 +26908,14 @@ public class TabletClientService { case 0: // SUCCESS if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list366 = iprot.readListBegin(); - struct.success = new java.util.ArrayList<TabletStats>(_list366.size); - @org.apache.thrift.annotation.Nullable TabletStats _elem367; - for (int _i368 = 0; _i368 < _list366.size; ++_i368) + org.apache.thrift.protocol.TList _list386 = iprot.readListBegin(); + struct.success = new java.util.ArrayList<TabletStats>(_list386.size); + @org.apache.thrift.annotation.Nullable TabletStats _elem387; + for (int _i388 = 0; _i388 < _list386.size; ++_i388) { - _elem367 = new TabletStats(); - _elem367.read(iprot); - struct.success.add(_elem367); + _elem387 = new TabletStats(); + _elem387.read(iprot); + struct.success.add(_elem387); } iprot.readListEnd(); } @@ -25493,9 +26953,9 @@ public class TabletClientService { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size())); - for (TabletStats _iter369 : struct.success) + for (TabletStats _iter389 : struct.success) { - _iter369.write(oprot); + _iter389.write(oprot); } oprot.writeListEnd(); } @@ -25535,9 +26995,9 @@ public class TabletClientService { if (struct.isSetSuccess()) { { oprot.writeI32(struct.success.size()); - for (TabletStats _iter370 : struct.success) + for (TabletStats _iter390 : struct.success) { - _iter370.write(oprot); + _iter390.write(oprot); } } } @@ -25552,14 +27012,14 @@ public class TabletClientService { java.util.BitSet incoming = iprot.readBitSet(2); if (incoming.get(0)) { { - org.apache.thrift.protocol.TList _list371 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); - struct.success = new java.util.ArrayList<TabletStats>(_list371.size); - @org.apache.thrift.annotation.Nullable TabletStats _elem372; - for (int _i373 = 0; _i373 < _list371.size; ++_i373) + org.apache.thrift.protocol.TList _list391 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); + struct.success = new java.util.ArrayList<TabletStats>(_list391.size); + @org.apache.thrift.annotation.Nullable TabletStats _elem392; + for (int _i393 = 0; _i393 < _list391.size; ++_i393) { - _elem372 = new TabletStats(); - _elem372.read(iprot); - struct.success.add(_elem372); + _elem392 = new TabletStats(); + _elem392.read(iprot); + struct.success.add(_elem392); } } struct.setSuccessIsSet(true); @@ -29044,14 +30504,14 @@ public class TabletClientService { case 0: // SUCCESS if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list374 = iprot.readListBegin(); - struct.success = new java.util.ArrayList<ActiveCompaction>(_list374.size); - @org.apache.thrift.annotation.Nullable ActiveCompaction _elem375; - for (int _i376 = 0; _i376 < _list374.size; ++_i376) + org.apache.thrift.protocol.TList _list394 = iprot.readListBegin(); + struct.success = new java.util.ArrayList<ActiveCompaction>(_list394.size); + @org.apache.thrift.annotation.Nullable ActiveCompaction _elem395; + for (int _i396 = 0; _i396 < _list394.size; ++_i396) { - _elem375 = new ActiveCompaction(); - _elem375.read(iprot); - struct.success.add(_elem375); + _elem395 = new ActiveCompaction(); + _elem395.read(iprot); + struct.success.add(_elem395); } iprot.readListEnd(); } @@ -29089,9 +30549,9 @@ public class TabletClientService { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size())); - for (ActiveCompaction _iter377 : struct.success) + for (ActiveCompaction _iter397 : struct.success) { - _iter377.write(oprot); + _iter397.write(oprot); } oprot.writeListEnd(); } @@ -29131,9 +30591,9 @@ public class TabletClientService { if (struct.isSetSuccess()) { { oprot.writeI32(struct.success.size()); - for (ActiveCompaction _iter378 : struct.success) + for (ActiveCompaction _iter398 : struct.success) { - _iter378.write(oprot); + _iter398.write(oprot); } } } @@ -29148,14 +30608,14 @@ public class TabletClientService { java.util.BitSet incoming = iprot.readBitSet(2); if (incoming.get(0)) { { - org.apache.thrift.protocol.TList _list379 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); - struct.success = new java.util.ArrayList<ActiveCompaction>(_list379.size); - @org.apache.thrift.annotation.Nullable ActiveCompaction _elem380; - for (int _i381 = 0; _i381 < _list379.size; ++_i381) + org.apache.thrift.protocol.TList _list399 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); + struct.success = new java.util.ArrayList<ActiveCompaction>(_list399.size); + @org.apache.thrift.annotation.Nullable ActiveCompaction _elem400; + for (int _i401 = 0; _i401 < _list399.size; ++_i401) { - _elem380 = new ActiveCompaction(); - _elem380.read(iprot); - struct.success.add(_elem380); + _elem400 = new ActiveCompaction(); + _elem400.read(iprot); + struct.success.add(_elem400); } } struct.setSuccessIsSet(true); @@ -29688,13 +31148,13 @@ public class TabletClientService { case 3: // FILENAMES if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list382 = iprot.readListBegin(); - struct.filenames = new java.util.ArrayList<java.lang.String>(_list382.size); - @org.apache.thrift.annotation.Nullable java.lang.String _elem383; - for (int _i384 = 0; _i384 < _list382.size; ++_i384) + org.apache.thrift.protocol.TList _list402 = iprot.readListBegin(); + struct.filenames = new java.util.ArrayList<java.lang.String>(_list402.size); + @org.apache.thrift.annotation.Nullable java.lang.String _elem403; + for (int _i404 = 0; _i404 < _list402.size; ++_i404) { - _elem383 = iprot.readString(); - struct.filenames.add(_elem383); + _elem403 = iprot.readString(); + struct.filenames.add(_elem403); } iprot.readListEnd(); } @@ -29733,9 +31193,9 @@ public class TabletClientService { oprot.writeFieldBegin(FILENAMES_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.filenames.size())); - for (java.lang.String _iter385 : struct.filenames) + for (java.lang.String _iter405 : struct.filenames) { - oprot.writeString(_iter385); + oprot.writeString(_iter405); } oprot.writeListEnd(); } @@ -29779,9 +31239,9 @@ public class TabletClientService { if (struct.isSetFilenames()) { { oprot.writeI32(struct.filenames.size()); - for (java.lang.String _iter386 : struct.filenames) + for (java.lang.String _iter406 : struct.filenames) { - oprot.writeString(_iter386); + oprot.writeString(_iter406); } } } @@ -29803,13 +31263,13 @@ public class TabletClientService { } if (incoming.get(2)) { { - org.apache.thrift.protocol.TList _list387 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRING); - struct.filenames = new java.util.ArrayList<java.lang.String>(_list387.size); - @org.apache.thrift.annotation.Nullable java.lang.String _elem388; - for (int _i389 = 0; _i389 < _list387.size; ++_i389) + org.apache.thrift.protocol.TList _list407 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRING); + struct.filenames = new java.util.ArrayList<java.lang.String>(_list407.size); + @org.apache.thrift.annotation.Nullable java.lang.String _elem408; + for (int _i409 = 0; _i409 < _list407.size; ++_i409) { - _elem388 = iprot.readString(); - struct.filenames.add(_elem388); + _elem408 = iprot.readString(); + struct.filenames.add(_elem408); } } struct.setFilenamesIsSet(true); @@ -30642,13 +32102,13 @@ public class TabletClientService { case 0: // SUCCESS if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list390 = iprot.readListBegin(); - struct.success = new java.util.ArrayList<java.lang.String>(_list390.size); - @org.apache.thrift.annotation.Nullable java.lang.String _elem391; - for (int _i392 = 0; _i392 < _list390.size; ++_i392) + org.apache.thrift.protocol.TList _list410 = iprot.readListBegin(); + struct.success = new java.util.ArrayList<java.lang.String>(_list410.size); + @org.apache.thrift.annotation.Nullable java.lang.String _elem411; + for (int _i412 = 0; _i412 < _list410.size; ++_i412) { - _elem391 = iprot.readString(); - struct.success.add(_elem391); + _elem411 = iprot.readString(); + struct.success.add(_elem411); } iprot.readListEnd(); } @@ -30677,9 +32137,9 @@ public class TabletClientService { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.success.size())); - for (java.lang.String _iter393 : struct.success) + for (java.lang.String _iter413 : struct.success) { - oprot.writeString(_iter393); + oprot.writeString(_iter413); } oprot.writeListEnd(); } @@ -30711,9 +32171,9 @@ public class TabletClientService { if (struct.isSetSuccess()) { { oprot.writeI32(struct.success.size()); - for (java.lang.String _iter394 : struct.success) + for (java.lang.String _iter414 : struct.success) { - oprot.writeString(_iter394); + oprot.writeString(_iter414); } } } @@ -30725,13 +32185,13 @@ public class TabletClientService { java.util.BitSet incoming = iprot.readBitSet(1); if (incoming.get(0)) { { - org.apache.thrift.protocol.TList _list395 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRING); - struct.success = new java.util.ArrayList<java.lang.String>(_list395.size); - @org.apache.thrift.annotation.Nullable java.lang.String _elem396; - for (int _i397 = 0; _i397 < _list395.size; ++_i397) + org.apache.thrift.protocol.TList _list415 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRING); + struct.success = new java.util.ArrayList<java.lang.String>(_list415.size); + @org.apache.thrift.annotation.Nullable java.lang.String _elem416; + for (int _i417 = 0; _i417 < _list415.size; ++_i417) { - _elem396 = iprot.readString(); - struct.success.add(_elem396); + _elem416 = iprot.readString(); + struct.success.add(_elem416); } } struct.setSuccessIsSet(true); @@ -33855,26 +35315,26 @@ public class TabletClientService { case 4: // FILES if (schemeField.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map398 = iprot.readMapBegin(); - struct.files = new java.util.HashMap<java.lang.String,java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>>(2*_map398.size); - @org.apache.thrift.annotation.Nullable java.lang.String _key399; - @org.apache.thrift.annotation.Nullable java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange> _val400; - for (int _i401 = 0; _i401 < _map398.size; ++_i401) + org.apache.thrift.protocol.TMap _map418 = iprot.readMapBegin(); + struct.files = new java.util.HashMap<java.lang.String,java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>>(2*_map418.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key419; + @org.apache.thrift.annotation.Nullable java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange> _val420; + for (int _i421 = 0; _i421 < _map418.size; ++_i421) { - _key399 = iprot.readString(); + _key419 = iprot.readString(); { - org.apache.thrift.protocol.TList _list402 = iprot.readListBegin(); - _val400 = new java.util.ArrayList<org.apache.accumulo.core.dataImpl.thrift.TRowRange>(_list402.size); - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TRowRange _elem403; - for (int _i404 = 0; _i404 < _list402.size; ++_i404) + org.apache.thrift.protocol.TList _list422 = iprot.readListBegin(); + _val420 = new java.util.ArrayList<org.apache.accumulo.core.dataImpl.thrift.TRowRange>(_list422.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TRowRange _elem423; + for (int _i424 = 0; _i424 < _list422.size; ++_i424) { - _elem403 = new org.apache.accumulo.core.dataImpl.thrift.TRowRange(); - _elem403.read(iprot); - _val400.add(_elem403); + _elem423 = new org.apache.accumulo.core.dataImpl.thrift.TRowRange(); + _elem423.read(iprot); + _val420.add(_elem423); } iprot.readListEnd(); } - struct.files.put(_key399, _val400); + struct.files.put(_key419, _val420); } iprot.readMapEnd(); } @@ -33918,14 +35378,14 @@ public class TabletClientService { oprot.writeFieldBegin(FILES_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, struct.files.size())); - for (java.util.Map.Entry<java.lang.String, java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>> _iter405 : struct.files.entrySet()) + for (java.util.Map.Entry<java.lang.String, java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>> _iter425 : struct.files.entrySet()) { - oprot.writeString(_iter405.getKey()); + oprot.writeString(_iter425.getKey()); { - oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter405.getValue().size())); - for (org.apache.accumulo.core.dataImpl.thrift.TRowRange _iter406 : _iter405.getValue()) + oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter425.getValue().size())); + for (org.apache.accumulo.core.dataImpl.thrift.TRowRange _iter426 : _iter425.getValue()) { - _iter406.write(oprot); + _iter426.write(oprot); } oprot.writeListEnd(); } @@ -33978,14 +35438,14 @@ public class TabletClientService { if (struct.isSetFiles()) { { oprot.writeI32(struct.files.size()); - for (java.util.Map.Entry<java.lang.String, java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>> _iter407 : struct.files.entrySet()) + for (java.util.Map.Entry<java.lang.String, java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>> _iter427 : struct.files.entrySet()) { - oprot.writeString(_iter407.getKey()); + oprot.writeString(_iter427.getKey()); { - oprot.writeI32(_iter407.getValue().size()); - for (org.apache.accumulo.core.dataImpl.thrift.TRowRange _iter408 : _iter407.getValue()) + oprot.writeI32(_iter427.getValue().size()); + for (org.apache.accumulo.core.dataImpl.thrift.TRowRange _iter428 : _iter427.getValue()) { - _iter408.write(oprot); + _iter428.write(oprot); } } } @@ -34014,25 +35474,25 @@ public class TabletClientService { } if (incoming.get(3)) { { - org.apache.thrift.protocol.TMap _map409 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST); - struct.files = new java.util.HashMap<java.lang.String,java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>>(2*_map409.size); - @org.apache.thrift.annotation.Nullable java.lang.String _key410; - @org.apache.thrift.annotation.Nullable java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange> _val411; - for (int _i412 = 0; _i412 < _map409.size; ++_i412) + org.apache.thrift.protocol.TMap _map429 = iprot.readMapBegin(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST); + struct.files = new java.util.HashMap<java.lang.String,java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange>>(2*_map429.size); + @org.apache.thrift.annotation.Nullable java.lang.String _key430; + @org.apache.thrift.annotation.Nullable java.util.List<org.apache.accumulo.core.dataImpl.thrift.TRowRange> _val431; + for (int _i432 = 0; _i432 < _map429.size; ++_i432) { - _key410 = iprot.readString(); + _key430 = iprot.readString(); { - org.apache.thrift.protocol.TList _list413 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); - _val411 = new java.util.ArrayList<org.apache.accumulo.core.dataImpl.thrift.TRowRange>(_list413.size); - @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TRowRange _elem414; - for (int _i415 = 0; _i415 < _list413.size; ++_i415) + org.apache.thrift.protocol.TList _list433 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); + _val431 = new java.util.ArrayList<org.apache.accumulo.core.dataImpl.thrift.TRowRange>(_list433.size); + @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TRowRange _elem434; + for (int _i435 = 0; _i435 < _list433.size; ++_i435) { - _elem414 = new org.apache.accumulo.core.dataImpl.thrift.TRowRange(); - _elem414.read(iprot); - _val411.add(_elem414); + _elem434 = new org.apache.accumulo.core.dataImpl.thrift.TRowRange(); + _elem434.read(iprot); + _val431.add(_elem434); } } - struct.files.put(_key410, _val411); + struct.files.put(_key430, _val431); } } struct.setFilesIsSet(true); @@ -36414,14 +37874,14 @@ public class TabletClientService { case 0: // SUCCESS if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list416 = iprot.readListBegin(); - struct.success = new java.util.ArrayList<TCompactionQueueSummary>(_list416.size); - @org.apache.thrift.annotation.Nullable TCompactionQueueSummary _elem417; - for (int _i418 = 0; _i418 < _list416.size; ++_i418) + org.apache.thrift.protocol.TList _list436 = iprot.readListBegin(); + struct.success = new java.util.ArrayList<TCompactionQueueSummary>(_list436.size); + @org.apache.thrift.annotation.Nullable TCompactionQueueSummary _elem437; + for (int _i438 = 0; _i438 < _list436.size; ++_i438) { - _elem417 = new TCompactionQueueSummary(); - _elem417.read(iprot); - struct.success.add(_elem417); + _elem437 = new TCompactionQueueSummary(); + _elem437.read(iprot); + struct.success.add(_elem437); } iprot.readListEnd(); } @@ -36459,9 +37919,9 @@ public class TabletClientService { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size())); - for (TCompactionQueueSummary _iter419 : struct.success) + for (TCompactionQueueSummary _iter439 : struct.success) { - _iter419.write(oprot); + _iter439.write(oprot); } oprot.writeListEnd(); } @@ -36501,9 +37961,9 @@ public class TabletClientService { if (struct.isSetSuccess()) { { oprot.writeI32(struct.success.size()); - for (TCompactionQueueSummary _iter420 : struct.success) + for (TCompactionQueueSummary _iter440 : struct.success) { - _iter420.write(oprot); + _iter440.write(oprot); } } } @@ -36518,14 +37978,14 @@ public class TabletClientService { java.util.BitSet incoming = iprot.readBitSet(2); if (incoming.get(0)) { { - org.apache.thrift.protocol.TList _list421 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); - struct.success = new java.util.ArrayList<TCompactionQueueSummary>(_list421.size); - @org.apache.thrift.annotation.Nullable TCompactionQueueSummary _elem422; - for (int _i423 = 0; _i423 < _list421.size; ++_i423) + org.apache.thrift.protocol.TList _list441 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); + struct.success = new java.util.ArrayList<TCompactionQueueSummary>(_list441.size); + @org.apache.thrift.annotation.Nullable TCompactionQueueSummary _elem442; + for (int _i443 = 0; _i443 < _list441.size; ++_i443) { - _elem422 = new TCompactionQueueSummary(); - _elem422.read(iprot); - struct.success.add(_elem422); + _elem442 = new TCompactionQueueSummary(); + _elem442.read(iprot); + struct.success.add(_elem442); } } struct.setSuccessIsSet(true); diff --git a/core/src/main/thrift/tabletserver.thrift b/core/src/main/thrift/tabletserver.thrift index 9fdc76b532..ce9a60f7ae 100644 --- a/core/src/main/thrift/tabletserver.thrift +++ b/core/src/main/thrift/tabletserver.thrift @@ -386,6 +386,15 @@ service TabletClientService { 6:bool setTime ) + void loadFilesV2( + 1:trace.TInfo tinfo + 2:security.TCredentials credentials + 3:i64 tid + 4:string dir + 5:map<data.TKeyExtent, map<string, data.MapFileInfo>> files + 6:bool setTime + ) + void splitTablet( 4:trace.TInfo tinfo 1:security.TCredentials credentials diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java index abed9684aa..df0b53bdbb 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.MutationsRejectedException; @@ -39,6 +40,7 @@ import org.apache.accumulo.core.clientImpl.bulk.Bulk; import org.apache.accumulo.core.clientImpl.bulk.Bulk.Files; import org.apache.accumulo.core.clientImpl.bulk.BulkSerialize; import org.apache.accumulo.core.clientImpl.bulk.LoadMappingIterator; +import org.apache.accumulo.core.conf.AccumuloConfiguration; import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.dataImpl.KeyExtent; @@ -69,6 +71,7 @@ import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.server.fs.VolumeManager; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; +import org.apache.thrift.TApplicationException; import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -114,7 +117,7 @@ class LoadFiles extends ManagerRepo { Loader loader; if (bulkInfo.tableState == TableState.ONLINE) { - loader = new OnlineLoader(); + loader = new OnlineLoader(manager.getConfiguration()); } else { loader = new OfflineLoader(); } @@ -159,12 +162,12 @@ class LoadFiles extends ManagerRepo { private static class OnlineLoader extends Loader { + private final int maxConnections; long timeInMillis; String fmtTid; int locationLess = 0; - // track how many tablets were sent load messages per tablet server - MapCounter<HostAndPort> loadMsgs; + int tabletsAdded; // Each RPC to a tablet server needs to check in zookeeper to see if the transaction is still // active. The purpose of this map is to group load request by tablet servers inorder to do less @@ -172,6 +175,11 @@ class LoadFiles extends ManagerRepo { Map<HostAndPort,Map<TKeyExtent,Map<String,MapFileInfo>>> loadQueue; private int queuedDataSize = 0; + public OnlineLoader(AccumuloConfiguration configuration) { + super(); + this.maxConnections = configuration.getCount(Property.MANAGER_BULK_MAX_CONNECTIONS); + } + @Override void start(Path bulkDir, Manager manager, long tid, boolean setTime) throws Exception { super.start(bulkDir, manager, tid, setTime); @@ -179,42 +187,125 @@ class LoadFiles extends ManagerRepo { timeInMillis = manager.getConfiguration().getTimeInMillis(Property.MANAGER_BULK_TIMEOUT); fmtTid = FateTxId.formatTid(tid); - loadMsgs = new MapCounter<>(); + tabletsAdded = 0; loadQueue = new HashMap<>(); } + private static class Client { + final HostAndPort server; + final TabletClientService.Client service; + + private Client(HostAndPort server, TabletClientService.Client service) { + this.server = server; + this.service = service; + } + } + private void sendQueued(int threshhold) { if (queuedDataSize > threshhold || threshhold == 0) { - loadQueue.forEach((server, tabletFiles) -> { + var sendTimer = Timer.startNew(); + + List<Client> clients = new ArrayList<>(); + try { + + // Send load messages to tablet servers spinning up work, but do not wait on results. + loadQueue.forEach((server, tabletFiles) -> { + + if (log.isTraceEnabled()) { + log.trace("{} asking {} to bulk import {} files for {} tablets", fmtTid, server, + tabletFiles.values().stream().mapToInt(Map::size).sum(), tabletFiles.size()); + } + + // Tablet servers process tablets serially and perform a single metadata table write for + // each tablet. Break the work into per-tablet chunks so it can be sent over multiple + // connections to the tserver, allowing each chunk to be run in parallel on the server + // side. This allows multiple threads on a single tserver to do metadata writes for this + // bulk import. + int neededConnections = Math.min(maxConnections, tabletFiles.size()); + List<Map<TKeyExtent,Map<String,MapFileInfo>>> chunks = + new ArrayList<>(neededConnections); + for (int i = 0; i < neededConnections; i++) { + chunks.add(new HashMap<>()); + } + + int nextConnection = 0; + for (var entry : tabletFiles.entrySet()) { + chunks.get(nextConnection++ % chunks.size()).put(entry.getKey(), entry.getValue()); + } + + for (var chunk : chunks) { + try { + var client = ThriftUtil.getClient(ThriftClientTypes.TABLET_SERVER, server, + manager.getContext(), timeInMillis); + // add client to list before calling send in case there is an exception, this makes + // sure its returned in the finally + clients.add(new Client(server, client)); + client.send_loadFilesV2(TraceUtil.traceInfo(), manager.getContext().rpcCreds(), tid, + bulkDir.toString(), chunk, setTime); + } catch (TException ex) { + log.debug("rpc send failed server: {}, {}", server, fmtTid, ex); + } + } + }); + + long sendTime = sendTimer.elapsed(TimeUnit.MILLISECONDS); + sendTimer.restart(); + + int outdatedTservers = 0; + + // wait for all the tservers to complete processing + for (var client : clients) { + try { + client.service.recv_loadFilesV2(); + } catch (TException ex) { + String additionalInfo = ""; + if (ex instanceof TApplicationException && ((TApplicationException) ex).getType() + == TApplicationException.UNKNOWN_METHOD) { + // A new RPC method was added in 2.1.4, a tserver running 2.1.3 or earlier will + // not have this RPC. This should not kill the fate operation, it can wait until + // all tablet servers are upgraded. + outdatedTservers++; + additionalInfo = " (tserver may be running older version)"; + } + log.debug("rpc recv failed server{}: {}, {}", additionalInfo, client.server, fmtTid, + ex); + } + } - if (log.isTraceEnabled()) { - log.trace("{} asking {} to bulk import {} files for {} tablets", fmtTid, server, - tabletFiles.values().stream().mapToInt(Map::size).sum(), tabletFiles.size()); + if (outdatedTservers > 0) { + log.warn( + "{} can not proceed with bulk import because {} tablet servers are likely running " + + "an older version. Please update tablet servers to same patch level as manager.", + fmtTid, outdatedTservers); } - TabletClientService.Client client = null; - try { - client = ThriftUtil.getClient(ThriftClientTypes.TABLET_SERVER, server, - manager.getContext(), timeInMillis); - client.loadFiles(TraceUtil.traceInfo(), manager.getContext().rpcCreds(), tid, - bulkDir.toString(), tabletFiles, setTime); - } catch (TException ex) { - log.debug("rpc failed server: " + server + ", " + fmtTid + " " + ex.getMessage(), ex); - } finally { - ThriftUtil.returnClient(client, manager.getContext()); + if (log.isDebugEnabled()) { + var recvTime = sendTimer.elapsed(TimeUnit.MILLISECONDS); + var tabletStats = loadQueue.values().stream().mapToInt(Map::size).summaryStatistics(); + log.debug( + "{} sent {} messages to {} tablet servers for {} tablets (min:{} max:{} avg:{} " + + "tablets per tserver), send time:{}ms recv time:{}ms {}:{}", + fmtTid, clients.size(), loadQueue.size(), tabletStats.getSum(), + tabletStats.getMin(), tabletStats.getMax(), tabletStats.getAverage(), sendTime, + recvTime, Property.MANAGER_BULK_MAX_CONNECTIONS.getKey(), maxConnections); } - }); - loadQueue.clear(); - queuedDataSize = 0; + loadQueue.clear(); + queuedDataSize = 0; + + } finally { + for (var client : clients) { + ThriftUtil.returnClient(client.service, manager.getContext()); + } + } } } private void addToQueue(HostAndPort server, KeyExtent extent, Map<String,MapFileInfo> thriftImports) { if (!thriftImports.isEmpty()) { - loadMsgs.increment(server, 1); + tabletsAdded++; Map<String,MapFileInfo> prev = loadQueue.computeIfAbsent(server, k -> new HashMap<>()) .putIfAbsent(extent.toThrift(), thriftImports); @@ -268,10 +359,12 @@ class LoadFiles extends ManagerRepo { sendQueued(0); long sleepTime = 0; - if (loadMsgs.size() > 0) { - // find which tablet server had the most load messages sent to it and sleep 13ms for each - // load message - sleepTime = loadMsgs.max() * 13; + if (tabletsAdded > 0) { + // Waited for all the tablet servers to process everything so a long sleep is not needed. + // Even though this code waited, it does not know what succeeded on the tablet server side + // and it did not track if there were connection errors. Since success status is unknown + // must return a non-zero sleep to indicate another scan of the metadata table is needed. + sleepTime = 1; } if (locationLess > 0) { diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletClientHandler.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletClientHandler.java index 7ef64352d9..d1ccbda59b 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletClientHandler.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletClientHandler.java @@ -248,6 +248,13 @@ public class TabletClientHandler implements TabletClientService.Iface { } + @Override + public void loadFilesV2(TInfo tinfo, TCredentials credentials, long tid, String dir, + Map<TKeyExtent,Map<String,MapFileInfo>> tabletImports, boolean setTime) + throws ThriftSecurityException { + loadFiles(tinfo, credentials, tid, dir, tabletImports, setTime); + } + @Override public long startUpdate(TInfo tinfo, TCredentials credentials, TDurability tdurabilty) throws ThriftSecurityException { diff --git a/test/src/main/java/org/apache/accumulo/test/functional/BulkNewIT.java b/test/src/main/java/org/apache/accumulo/test/functional/BulkNewIT.java index 1cb6bbf953..f727d0069d 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/BulkNewIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/BulkNewIT.java @@ -50,6 +50,7 @@ import java.util.TreeSet; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.stream.Collectors; +import java.util.stream.IntStream; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; @@ -621,6 +622,47 @@ public class BulkNewIT extends SharedMiniClusterBase { } } + @Test + public void testManyTablets() throws Exception { + + try (AccumuloClient c = Accumulo.newClient().from(getClientProps()).build()) { + String dir = getDir("/testManyTablets-"); + writeData(dir + "/f1.", aconf, 0, 199); + writeData(dir + "/f2.", aconf, 200, 399); + writeData(dir + "/f3.", aconf, 400, 599); + writeData(dir + "/f4.", aconf, 600, 799); + writeData(dir + "/f5.", aconf, 800, 999); + + var splits = IntStream.range(1, 1000).mapToObj(BulkNewIT::row).map(Text::new) + .collect(Collectors.toCollection(TreeSet::new)); + + // faster to create a table w/ lots of splits + c.tableOperations().delete(tableName); + c.tableOperations().create(tableName, new NewTableConfiguration().withSplits(splits)); + + var lpBuilder = LoadPlan.builder(); + lpBuilder.loadFileTo("f1.rf", RangeType.TABLE, null, row(1)); + IntStream.range(2, 200) + .forEach(i -> lpBuilder.loadFileTo("f1.rf", RangeType.TABLE, row(i - 1), row(i))); + IntStream.range(200, 400) + .forEach(i -> lpBuilder.loadFileTo("f2.rf", RangeType.TABLE, row(i - 1), row(i))); + IntStream.range(400, 600) + .forEach(i -> lpBuilder.loadFileTo("f3.rf", RangeType.TABLE, row(i - 1), row(i))); + IntStream.range(600, 800) + .forEach(i -> lpBuilder.loadFileTo("f4.rf", RangeType.TABLE, row(i - 1), row(i))); + IntStream.range(800, 1000) + .forEach(i -> lpBuilder.loadFileTo("f5.rf", RangeType.TABLE, row(i - 1), row(i))); + + var loadPlan = lpBuilder.build(); + + c.tableOperations().importDirectory(dir).to(tableName).plan(loadPlan).load(); + + verifyData(c, tableName, 0, 999, false); + + } + + } + private void addSplits(AccumuloClient client, String tableName, String splitString) throws Exception { SortedSet<Text> splits = new TreeSet<>(); diff --git a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java index 19c7245d74..e470d1ff48 100644 --- a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java +++ b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java @@ -128,6 +128,10 @@ public class NullTserver { public void loadFiles(TInfo tinfo, TCredentials credentials, long tid, String dir, Map<TKeyExtent,Map<String,MapFileInfo>> fileMap, boolean setTime) {} + @Override + public void loadFilesV2(TInfo tinfo, TCredentials credentials, long tid, String dir, + Map<TKeyExtent,Map<String,MapFileInfo>> fileMap, boolean setTime) {} + @Override public void closeMultiScan(TInfo tinfo, long scanID) {}