Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 
 package org.apache.hadoop.hbase.protobuf;
 
 
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
 
 
 public class ReplicationProtbufUtil {
  
A helper to replicate a list of HLog entries using admin protocol.

Parameters:
admin
entries
Throws:
java.io.IOException
 
   public static void replicateWALEntry(final AdminService.BlockingInterface admin,
       final HLog.Entry[] entriesthrows IOException {
       buildReplicateWALEntryRequest(entries);
     try {
       admin.replicateWALEntry(controllerp.getFirst());
     } catch (ServiceException se) {
       throw ProtobufUtil.getRemoteException(se);
     }
   }

  
Create a new ReplicateWALEntryRequest from a list of HLog entries

Parameters:
entries the HLog entries to be replicated
Returns:
a pair of ReplicateWALEntryRequest and a CellScanner over all the WALEdit values found.
 
       buildReplicateWALEntryRequest(final HLog.Entry[] entries) {
     // Accumulate all the KVs seen in here.
     List<List<? extends Cell>> allkvs = new ArrayList<List<? extends Cell>>(entries.length);
     int size = 0;
     WALProtos.FamilyScope.Builder scopeBuilder = WALProtos.FamilyScope.newBuilder();
     AdminProtos.WALEntry.Builder entryBuilder = AdminProtos.WALEntry.newBuilder();
       AdminProtos.ReplicateWALEntryRequest.newBuilder();
     HBaseProtos.UUID.Builder uuidBuilder = HBaseProtos.UUID.newBuilder();
     for (HLog.Entry entryentries) {
       entryBuilder.clear();
       // TODO: this duplicates a lot in HLogKey#getBuilder
       WALProtos.WALKey.Builder keyBuilder = entryBuilder.getKeyBuilder();
       HLogKey key = entry.getKey();
       keyBuilder.setEncodedRegionName(
         ByteStringer.wrap(key.getEncodedRegionName()));
       keyBuilder.setTableName(ByteStringer.wrap(key.getTablename().getName()));
       keyBuilder.setLogSequenceNumber(key.getLogSeqNum());
       keyBuilder.setWriteTime(key.getWriteTime());
       if (key.getNonce() != .) {
         keyBuilder.setNonce(key.getNonce());
      }
      if (key.getNonceGroup() != .) {
        keyBuilder.setNonceGroup(key.getNonceGroup());
      }
      for(UUID clusterId : key.getClusterIds()) {
        uuidBuilder.setLeastSigBits(clusterId.getLeastSignificantBits());
        uuidBuilder.setMostSigBits(clusterId.getMostSignificantBits());
        keyBuilder.addClusterIds(uuidBuilder.build());
      }
      WALEdit edit = entry.getEdit();
      NavigableMap<byte[], Integerscopes = key.getScopes();
      if (scopes != null && !scopes.isEmpty()) {
        for (Map.Entry<byte[], Integerscopescopes.entrySet()) {
          scopeBuilder.setFamily(ByteStringer.wrap(scope.getKey()));
          WALProtos.ScopeType scopeType =
              WALProtos.ScopeType.valueOf(scope.getValue().intValue());
          scopeBuilder.setScopeType(scopeType);
          keyBuilder.addScopes(scopeBuilder.build());
        }
      }
      List<KeyValuekvs = edit.getKeyValues();
      // Add up the size.  It is used later serializing out the kvs.
      for (KeyValue kvkvs) {
        size += kv.getLength();
      }
      // Collect up the kvs
      allkvs.add(kvs);
      // Write out how many kvs associated with this entry.
      entryBuilder.setAssociatedCellCount(kvs.size());
      builder.addEntry(entryBuilder.build());
    }
    return new Pair<AdminProtos.ReplicateWALEntryRequestCellScanner>(builder.build(),
      getCellScanner(allkvssize));
  }

  

Parameters:
cells
Returns:
cells packaged as a CellScanner
  static CellScanner getCellScanner(final List<List<? extends Cell>> cellsfinal int size) {
    return new SizedCellScanner() {
      private final Iterator<List<? extends Cell>> entries = cells.iterator();
      private Iterator<? extends CellcurrentIterator = null;
      private Cell currentCell;
      @Override
      public Cell current() {
        return this.;
      }
      @Override
      public boolean advance() {
        if (this. == null) {
          if (!this..hasNext()) return false;
          this. = this..next().iterator();
        }
        if (this..hasNext()) {
          this. = this..next();
          return true;
        }
        this. = null;
        this. = null;
        return advance();
      }
      @Override
      public long heapSize() {
        return size;
      }
    };
  }
New to GrepCode? Check out our FAQ X