You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2017/08/02 16:33:49 UTC
[17/51] [partial] hbase git commit: HBASE-17056 Remove checked in PB
generated files
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a6de1bd/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilder.java
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilder.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilder.java
deleted file mode 100644
index 8968a70..0000000
--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilder.java
+++ /dev/null
@@ -1,708 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package org.apache.hadoop.hbase.shaded.com.google.protobuf;
-
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * {@code RepeatedFieldBuilder} implements a structure that a protocol
- * message uses to hold a repeated field of other protocol messages. It supports
- * the classical use case of adding immutable {@link Message}'s to the
- * repeated field and is highly optimized around this (no extra memory
- * allocations and sharing of immutable arrays).
- * <br>
- * It also supports the additional use case of adding a {@link Message.Builder}
- * to the repeated field and deferring conversion of that {@code Builder}
- * to an immutable {@code Message}. In this way, it's possible to maintain
- * a tree of {@code Builder}'s that acts as a fully read/write data
- * structure.
- * <br>
- * Logically, one can think of a tree of builders as converting the entire tree
- * to messages when build is called on the root or when any method is called
- * that desires a Message instead of a Builder. In terms of the implementation,
- * the {@code SingleFieldBuilder} and {@code RepeatedFieldBuilder}
- * classes cache messages that were created so that messages only need to be
- * created when some change occurred in its builder or a builder for one of its
- * descendants.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- *
- * @author jonp@google.com (Jon Perlow)
- */
-public class RepeatedFieldBuilder
- <MType extends GeneratedMessage,
- BType extends GeneratedMessage.Builder,
- IType extends MessageOrBuilder>
- implements GeneratedMessage.BuilderParent {
-
- // Parent to send changes to.
- private GeneratedMessage.BuilderParent parent;
-
- // List of messages. Never null. It may be immutable, in which case
- // isMessagesListMutable will be false. See note below.
- private List<MType> messages;
-
- // Whether messages is an mutable array that can be modified.
- private boolean isMessagesListMutable;
-
- // List of builders. May be null, in which case, no nested builders were
- // created. If not null, entries represent the builder for that index.
- private List<SingleFieldBuilder<MType, BType, IType>> builders;
-
- // Here are the invariants for messages and builders:
- // 1. messages is never null and its count corresponds to the number of items
- // in the repeated field.
- // 2. If builders is non-null, messages and builders MUST always
- // contain the same number of items.
- // 3. Entries in either array can be null, but for any index, there MUST be
- // either a Message in messages or a builder in builders.
- // 4. If the builder at an index is non-null, the builder is
- // authoritative. This is the case where a Builder was set on the index.
- // Any message in the messages array MUST be ignored.
- // t. If the builder at an index is null, the message in the messages
- // list is authoritative. This is the case where a Message (not a Builder)
- // was set directly for an index.
-
- // Indicates that we've built a message and so we are now obligated
- // to dispatch dirty invalidations. See GeneratedMessage.BuilderListener.
- private boolean isClean;
-
- // A view of this builder that exposes a List interface of messages. This is
- // initialized on demand. This is fully backed by this object and all changes
- // are reflected in it. Access to any item converts it to a message if it
- // was a builder.
- private MessageExternalList<MType, BType, IType> externalMessageList;
-
- // A view of this builder that exposes a List interface of builders. This is
- // initialized on demand. This is fully backed by this object and all changes
- // are reflected in it. Access to any item converts it to a builder if it
- // was a message.
- private BuilderExternalList<MType, BType, IType> externalBuilderList;
-
- // A view of this builder that exposes a List interface of the interface
- // implemented by messages and builders. This is initialized on demand. This
- // is fully backed by this object and all changes are reflected in it.
- // Access to any item returns either a builder or message depending on
- // what is most efficient.
- private MessageOrBuilderExternalList<MType, BType, IType>
- externalMessageOrBuilderList;
-
- /**
- * Constructs a new builder with an empty list of messages.
- *
- * @param messages the current list of messages
- * @param isMessagesListMutable Whether the messages list is mutable
- * @param parent a listener to notify of changes
- * @param isClean whether the builder is initially marked clean
- */
- public RepeatedFieldBuilder(
- List<MType> messages,
- boolean isMessagesListMutable,
- GeneratedMessage.BuilderParent parent,
- boolean isClean) {
- this.messages = messages;
- this.isMessagesListMutable = isMessagesListMutable;
- this.parent = parent;
- this.isClean = isClean;
- }
-
- public void dispose() {
- // Null out parent so we stop sending it invalidations.
- parent = null;
- }
-
- /**
- * Ensures that the list of messages is mutable so it can be updated. If it's
- * immutable, a copy is made.
- */
- private void ensureMutableMessageList() {
- if (!isMessagesListMutable) {
- messages = new ArrayList<MType>(messages);
- isMessagesListMutable = true;
- }
- }
-
- /**
- * Ensures that the list of builders is not null. If it's null, the list is
- * created and initialized to be the same size as the messages list with
- * null entries.
- */
- private void ensureBuilders() {
- if (this.builders == null) {
- this.builders =
- new ArrayList<SingleFieldBuilder<MType, BType, IType>>(
- messages.size());
- for (int i = 0; i < messages.size(); i++) {
- builders.add(null);
- }
- }
- }
-
- /**
- * Gets the count of items in the list.
- *
- * @return the count of items in the list.
- */
- public int getCount() {
- return messages.size();
- }
-
- /**
- * Gets whether the list is empty.
- *
- * @return whether the list is empty
- */
- public boolean isEmpty() {
- return messages.isEmpty();
- }
-
- /**
- * Get the message at the specified index. If the message is currently stored
- * as a {@code Builder}, it is converted to a {@code Message} by
- * calling {@link Message.Builder#buildPartial} on it.
- *
- * @param index the index of the message to get
- * @return the message for the specified index
- */
- public MType getMessage(int index) {
- return getMessage(index, false);
- }
-
- /**
- * Get the message at the specified index. If the message is currently stored
- * as a {@code Builder}, it is converted to a {@code Message} by
- * calling {@link Message.Builder#buildPartial} on it.
- *
- * @param index the index of the message to get
- * @param forBuild this is being called for build so we want to make sure
- * we SingleFieldBuilder.build to send dirty invalidations
- * @return the message for the specified index
- */
- private MType getMessage(int index, boolean forBuild) {
- if (this.builders == null) {
- // We don't have any builders -- return the current Message.
- // This is the case where no builder was created, so we MUST have a
- // Message.
- return messages.get(index);
- }
-
- SingleFieldBuilder<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- // We don't have a builder -- return the current message.
- // This is the case where no builder was created for the entry at index,
- // so we MUST have a message.
- return messages.get(index);
-
- } else {
- return forBuild ? builder.build() : builder.getMessage();
- }
- }
-
- /**
- * Gets a builder for the specified index. If no builder has been created for
- * that index, a builder is created on demand by calling
- * {@link Message#toBuilder}.
- *
- * @param index the index of the message to get
- * @return The builder for that index
- */
- public BType getBuilder(int index) {
- ensureBuilders();
- SingleFieldBuilder<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- MType message = messages.get(index);
- builder = new SingleFieldBuilder<MType, BType, IType>(
- message, this, isClean);
- builders.set(index, builder);
- }
- return builder.getBuilder();
- }
-
- /**
- * Gets the base class interface for the specified index. This may either be
- * a builder or a message. It will return whatever is more efficient.
- *
- * @param index the index of the message to get
- * @return the message or builder for the index as the base class interface
- */
- @SuppressWarnings("unchecked")
- public IType getMessageOrBuilder(int index) {
- if (this.builders == null) {
- // We don't have any builders -- return the current Message.
- // This is the case where no builder was created, so we MUST have a
- // Message.
- return (IType) messages.get(index);
- }
-
- SingleFieldBuilder<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- // We don't have a builder -- return the current message.
- // This is the case where no builder was created for the entry at index,
- // so we MUST have a message.
- return (IType) messages.get(index);
-
- } else {
- return builder.getMessageOrBuilder();
- }
- }
-
- /**
- * Sets a message at the specified index replacing the existing item at
- * that index.
- *
- * @param index the index to set.
- * @param message the message to set
- * @return the builder
- */
- public RepeatedFieldBuilder<MType, BType, IType> setMessage(
- int index, MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.set(index, message);
- if (builders != null) {
- SingleFieldBuilder<MType, BType, IType> entry =
- builders.set(index, null);
- if (entry != null) {
- entry.dispose();
- }
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends the specified element to the end of this list.
- *
- * @param message the message to add
- * @return the builder
- */
- public RepeatedFieldBuilder<MType, BType, IType> addMessage(
- MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.add(message);
- if (builders != null) {
- builders.add(null);
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Inserts the specified message at the specified position in this list.
- * Shifts the element currently at that position (if any) and any subsequent
- * elements to the right (adds one to their indices).
- *
- * @param index the index at which to insert the message
- * @param message the message to add
- * @return the builder
- */
- public RepeatedFieldBuilder<MType, BType, IType> addMessage(
- int index, MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.add(index, message);
- if (builders != null) {
- builders.add(index, null);
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends all of the messages in the specified collection to the end of
- * this list, in the order that they are returned by the specified
- * collection's iterator.
- *
- * @param values the messages to add
- * @return the builder
- */
- public RepeatedFieldBuilder<MType, BType, IType> addAllMessages(
- Iterable<? extends MType> values) {
- for (final MType value : values) {
- if (value == null) {
- throw new NullPointerException();
- }
- }
-
- // If we can inspect the size, we can more efficiently add messages.
- int size = -1;
- if (values instanceof Collection) {
- @SuppressWarnings("unchecked") final
- Collection<MType> collection = (Collection<MType>) values;
- if (collection.size() == 0) {
- return this;
- }
- size = collection.size();
- }
- ensureMutableMessageList();
-
- if (size >= 0 && messages instanceof ArrayList) {
- ((ArrayList<MType>) messages)
- .ensureCapacity(messages.size() + size);
- }
-
- for (MType value : values) {
- addMessage(value);
- }
-
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends a new builder to the end of this list and returns the builder.
- *
- * @param message the message to add which is the basis of the builder
- * @return the new builder
- */
- public BType addBuilder(MType message) {
- ensureMutableMessageList();
- ensureBuilders();
- SingleFieldBuilder<MType, BType, IType> builder =
- new SingleFieldBuilder<MType, BType, IType>(
- message, this, isClean);
- messages.add(null);
- builders.add(builder);
- onChanged();
- incrementModCounts();
- return builder.getBuilder();
- }
-
- /**
- * Inserts a new builder at the specified position in this list.
- * Shifts the element currently at that position (if any) and any subsequent
- * elements to the right (adds one to their indices).
- *
- * @param index the index at which to insert the builder
- * @param message the message to add which is the basis of the builder
- * @return the builder
- */
- public BType addBuilder(int index, MType message) {
- ensureMutableMessageList();
- ensureBuilders();
- SingleFieldBuilder<MType, BType, IType> builder =
- new SingleFieldBuilder<MType, BType, IType>(
- message, this, isClean);
- messages.add(index, null);
- builders.add(index, builder);
- onChanged();
- incrementModCounts();
- return builder.getBuilder();
- }
-
- /**
- * Removes the element at the specified position in this list. Shifts any
- * subsequent elements to the left (subtracts one from their indices).
- * Returns the element that was removed from the list.
- *
- * @param index the index at which to remove the message
- */
- public void remove(int index) {
- ensureMutableMessageList();
- messages.remove(index);
- if (builders != null) {
- SingleFieldBuilder<MType, BType, IType> entry =
- builders.remove(index);
- if (entry != null) {
- entry.dispose();
- }
- }
- onChanged();
- incrementModCounts();
- }
-
- /**
- * Removes all of the elements from this list.
- * The list will be empty after this call returns.
- */
- public void clear() {
- messages = Collections.emptyList();
- isMessagesListMutable = false;
- if (builders != null) {
- for (SingleFieldBuilder<MType, BType, IType> entry :
- builders) {
- if (entry != null) {
- entry.dispose();
- }
- }
- builders = null;
- }
- onChanged();
- incrementModCounts();
- }
-
- /**
- * Builds the list of messages from the builder and returns them.
- *
- * @return an immutable list of messages
- */
- public List<MType> build() {
- // Now that build has been called, we are required to dispatch
- // invalidations.
- isClean = true;
-
- if (!isMessagesListMutable && builders == null) {
- // We still have an immutable list and we never created a builder.
- return messages;
- }
-
- boolean allMessagesInSync = true;
- if (!isMessagesListMutable) {
- // We still have an immutable list. Let's see if any of them are out
- // of sync with their builders.
- for (int i = 0; i < messages.size(); i++) {
- Message message = messages.get(i);
- SingleFieldBuilder<MType, BType, IType> builder = builders.get(i);
- if (builder != null) {
- if (builder.build() != message) {
- allMessagesInSync = false;
- break;
- }
- }
- }
- if (allMessagesInSync) {
- // Immutable list is still in sync.
- return messages;
- }
- }
-
- // Need to make sure messages is up to date
- ensureMutableMessageList();
- for (int i = 0; i < messages.size(); i++) {
- messages.set(i, getMessage(i, true));
- }
-
- // We're going to return our list as immutable so we mark that we can
- // no longer update it.
- messages = Collections.unmodifiableList(messages);
- isMessagesListMutable = false;
- return messages;
- }
-
- /**
- * Gets a view of the builder as a list of messages. The returned list is live
- * and will reflect any changes to the underlying builder.
- *
- * @return the messages in the list
- */
- public List<MType> getMessageList() {
- if (externalMessageList == null) {
- externalMessageList =
- new MessageExternalList<MType, BType, IType>(this);
- }
- return externalMessageList;
- }
-
- /**
- * Gets a view of the builder as a list of builders. This returned list is
- * live and will reflect any changes to the underlying builder.
- *
- * @return the builders in the list
- */
- public List<BType> getBuilderList() {
- if (externalBuilderList == null) {
- externalBuilderList =
- new BuilderExternalList<MType, BType, IType>(this);
- }
- return externalBuilderList;
- }
-
- /**
- * Gets a view of the builder as a list of MessageOrBuilders. This returned
- * list is live and will reflect any changes to the underlying builder.
- *
- * @return the builders in the list
- */
- public List<IType> getMessageOrBuilderList() {
- if (externalMessageOrBuilderList == null) {
- externalMessageOrBuilderList =
- new MessageOrBuilderExternalList<MType, BType, IType>(this);
- }
- return externalMessageOrBuilderList;
- }
-
- /**
- * Called when a the builder or one of its nested children has changed
- * and any parent should be notified of its invalidation.
- */
- private void onChanged() {
- if (isClean && parent != null) {
- parent.markDirty();
-
- // Don't keep dispatching invalidations until build is called again.
- isClean = false;
- }
- }
-
- @Override
- public void markDirty() {
- onChanged();
- }
-
- /**
- * Increments the mod counts so that an ConcurrentModificationException can
- * be thrown if calling code tries to modify the builder while its iterating
- * the list.
- */
- private void incrementModCounts() {
- if (externalMessageList != null) {
- externalMessageList.incrementModCount();
- }
- if (externalBuilderList != null) {
- externalBuilderList.incrementModCount();
- }
- if (externalMessageOrBuilderList != null) {
- externalMessageOrBuilderList.incrementModCount();
- }
- }
-
- /**
- * Provides a live view of the builder as a list of messages.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class MessageExternalList<
- MType extends GeneratedMessage,
- BType extends GeneratedMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<MType> implements List<MType> {
-
- RepeatedFieldBuilder<MType, BType, IType> builder;
-
- MessageExternalList(
- RepeatedFieldBuilder<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public MType get(int index) {
- return builder.getMessage(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-
- /**
- * Provides a live view of the builder as a list of builders.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class BuilderExternalList<
- MType extends GeneratedMessage,
- BType extends GeneratedMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<BType> implements List<BType> {
-
- RepeatedFieldBuilder<MType, BType, IType> builder;
-
- BuilderExternalList(
- RepeatedFieldBuilder<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public BType get(int index) {
- return builder.getBuilder(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-
- /**
- * Provides a live view of the builder as a list of builders.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class MessageOrBuilderExternalList<
- MType extends GeneratedMessage,
- BType extends GeneratedMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<IType> implements List<IType> {
-
- RepeatedFieldBuilder<MType, BType, IType> builder;
-
- MessageOrBuilderExternalList(
- RepeatedFieldBuilder<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public IType get(int index) {
- return builder.getMessageOrBuilder(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a6de1bd/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilderV3.java
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilderV3.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilderV3.java
deleted file mode 100644
index 9963e05..0000000
--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RepeatedFieldBuilderV3.java
+++ /dev/null
@@ -1,708 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package org.apache.hadoop.hbase.shaded.com.google.protobuf;
-
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * {@code RepeatedFieldBuilderV3} implements a structure that a protocol
- * message uses to hold a repeated field of other protocol messages. It supports
- * the classical use case of adding immutable {@link Message}'s to the
- * repeated field and is highly optimized around this (no extra memory
- * allocations and sharing of immutable arrays).
- * <br>
- * It also supports the additional use case of adding a {@link Message.Builder}
- * to the repeated field and deferring conversion of that {@code Builder}
- * to an immutable {@code Message}. In this way, it's possible to maintain
- * a tree of {@code Builder}'s that acts as a fully read/write data
- * structure.
- * <br>
- * Logically, one can think of a tree of builders as converting the entire tree
- * to messages when build is called on the root or when any method is called
- * that desires a Message instead of a Builder. In terms of the implementation,
- * the {@code SingleFieldBuilderV3} and {@code RepeatedFieldBuilderV3}
- * classes cache messages that were created so that messages only need to be
- * created when some change occurred in its builder or a builder for one of its
- * descendants.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- *
- * @author jonp@google.com (Jon Perlow)
- */
-public class RepeatedFieldBuilderV3
- <MType extends AbstractMessage,
- BType extends AbstractMessage.Builder,
- IType extends MessageOrBuilder>
- implements AbstractMessage.BuilderParent {
-
- // Parent to send changes to.
- private AbstractMessage.BuilderParent parent;
-
- // List of messages. Never null. It may be immutable, in which case
- // isMessagesListMutable will be false. See note below.
- private List<MType> messages;
-
- // Whether messages is an mutable array that can be modified.
- private boolean isMessagesListMutable;
-
- // List of builders. May be null, in which case, no nested builders were
- // created. If not null, entries represent the builder for that index.
- private List<SingleFieldBuilderV3<MType, BType, IType>> builders;
-
- // Here are the invariants for messages and builders:
- // 1. messages is never null and its count corresponds to the number of items
- // in the repeated field.
- // 2. If builders is non-null, messages and builders MUST always
- // contain the same number of items.
- // 3. Entries in either array can be null, but for any index, there MUST be
- // either a Message in messages or a builder in builders.
- // 4. If the builder at an index is non-null, the builder is
- // authoritative. This is the case where a Builder was set on the index.
- // Any message in the messages array MUST be ignored.
- // t. If the builder at an index is null, the message in the messages
- // list is authoritative. This is the case where a Message (not a Builder)
- // was set directly for an index.
-
- // Indicates that we've built a message and so we are now obligated
- // to dispatch dirty invalidations. See AbstractMessage.BuilderListener.
- private boolean isClean;
-
- // A view of this builder that exposes a List interface of messages. This is
- // initialized on demand. This is fully backed by this object and all changes
- // are reflected in it. Access to any item converts it to a message if it
- // was a builder.
- private MessageExternalList<MType, BType, IType> externalMessageList;
-
- // A view of this builder that exposes a List interface of builders. This is
- // initialized on demand. This is fully backed by this object and all changes
- // are reflected in it. Access to any item converts it to a builder if it
- // was a message.
- private BuilderExternalList<MType, BType, IType> externalBuilderList;
-
- // A view of this builder that exposes a List interface of the interface
- // implemented by messages and builders. This is initialized on demand. This
- // is fully backed by this object and all changes are reflected in it.
- // Access to any item returns either a builder or message depending on
- // what is most efficient.
- private MessageOrBuilderExternalList<MType, BType, IType>
- externalMessageOrBuilderList;
-
- /**
- * Constructs a new builder with an empty list of messages.
- *
- * @param messages the current list of messages
- * @param isMessagesListMutable Whether the messages list is mutable
- * @param parent a listener to notify of changes
- * @param isClean whether the builder is initially marked clean
- */
- public RepeatedFieldBuilderV3(
- List<MType> messages,
- boolean isMessagesListMutable,
- AbstractMessage.BuilderParent parent,
- boolean isClean) {
- this.messages = messages;
- this.isMessagesListMutable = isMessagesListMutable;
- this.parent = parent;
- this.isClean = isClean;
- }
-
- public void dispose() {
- // Null out parent so we stop sending it invalidations.
- parent = null;
- }
-
- /**
- * Ensures that the list of messages is mutable so it can be updated. If it's
- * immutable, a copy is made.
- */
- private void ensureMutableMessageList() {
- if (!isMessagesListMutable) {
- messages = new ArrayList<MType>(messages);
- isMessagesListMutable = true;
- }
- }
-
- /**
- * Ensures that the list of builders is not null. If it's null, the list is
- * created and initialized to be the same size as the messages list with
- * null entries.
- */
- private void ensureBuilders() {
- if (this.builders == null) {
- this.builders =
- new ArrayList<SingleFieldBuilderV3<MType, BType, IType>>(
- messages.size());
- for (int i = 0; i < messages.size(); i++) {
- builders.add(null);
- }
- }
- }
-
- /**
- * Gets the count of items in the list.
- *
- * @return the count of items in the list.
- */
- public int getCount() {
- return messages.size();
- }
-
- /**
- * Gets whether the list is empty.
- *
- * @return whether the list is empty
- */
- public boolean isEmpty() {
- return messages.isEmpty();
- }
-
- /**
- * Get the message at the specified index. If the message is currently stored
- * as a {@code Builder}, it is converted to a {@code Message} by
- * calling {@link Message.Builder#buildPartial} on it.
- *
- * @param index the index of the message to get
- * @return the message for the specified index
- */
- public MType getMessage(int index) {
- return getMessage(index, false);
- }
-
- /**
- * Get the message at the specified index. If the message is currently stored
- * as a {@code Builder}, it is converted to a {@code Message} by
- * calling {@link Message.Builder#buildPartial} on it.
- *
- * @param index the index of the message to get
- * @param forBuild this is being called for build so we want to make sure
- * we SingleFieldBuilderV3.build to send dirty invalidations
- * @return the message for the specified index
- */
- private MType getMessage(int index, boolean forBuild) {
- if (this.builders == null) {
- // We don't have any builders -- return the current Message.
- // This is the case where no builder was created, so we MUST have a
- // Message.
- return messages.get(index);
- }
-
- SingleFieldBuilderV3<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- // We don't have a builder -- return the current message.
- // This is the case where no builder was created for the entry at index,
- // so we MUST have a message.
- return messages.get(index);
-
- } else {
- return forBuild ? builder.build() : builder.getMessage();
- }
- }
-
- /**
- * Gets a builder for the specified index. If no builder has been created for
- * that index, a builder is created on demand by calling
- * {@link Message#toBuilder}.
- *
- * @param index the index of the message to get
- * @return The builder for that index
- */
- public BType getBuilder(int index) {
- ensureBuilders();
- SingleFieldBuilderV3<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- MType message = messages.get(index);
- builder = new SingleFieldBuilderV3<MType, BType, IType>(
- message, this, isClean);
- builders.set(index, builder);
- }
- return builder.getBuilder();
- }
-
- /**
- * Gets the base class interface for the specified index. This may either be
- * a builder or a message. It will return whatever is more efficient.
- *
- * @param index the index of the message to get
- * @return the message or builder for the index as the base class interface
- */
- @SuppressWarnings("unchecked")
- public IType getMessageOrBuilder(int index) {
- if (this.builders == null) {
- // We don't have any builders -- return the current Message.
- // This is the case where no builder was created, so we MUST have a
- // Message.
- return (IType) messages.get(index);
- }
-
- SingleFieldBuilderV3<MType, BType, IType> builder = builders.get(index);
- if (builder == null) {
- // We don't have a builder -- return the current message.
- // This is the case where no builder was created for the entry at index,
- // so we MUST have a message.
- return (IType) messages.get(index);
-
- } else {
- return builder.getMessageOrBuilder();
- }
- }
-
- /**
- * Sets a message at the specified index replacing the existing item at
- * that index.
- *
- * @param index the index to set.
- * @param message the message to set
- * @return the builder
- */
- public RepeatedFieldBuilderV3<MType, BType, IType> setMessage(
- int index, MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.set(index, message);
- if (builders != null) {
- SingleFieldBuilderV3<MType, BType, IType> entry =
- builders.set(index, null);
- if (entry != null) {
- entry.dispose();
- }
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends the specified element to the end of this list.
- *
- * @param message the message to add
- * @return the builder
- */
- public RepeatedFieldBuilderV3<MType, BType, IType> addMessage(
- MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.add(message);
- if (builders != null) {
- builders.add(null);
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Inserts the specified message at the specified position in this list.
- * Shifts the element currently at that position (if any) and any subsequent
- * elements to the right (adds one to their indices).
- *
- * @param index the index at which to insert the message
- * @param message the message to add
- * @return the builder
- */
- public RepeatedFieldBuilderV3<MType, BType, IType> addMessage(
- int index, MType message) {
- if (message == null) {
- throw new NullPointerException();
- }
- ensureMutableMessageList();
- messages.add(index, message);
- if (builders != null) {
- builders.add(index, null);
- }
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends all of the messages in the specified collection to the end of
- * this list, in the order that they are returned by the specified
- * collection's iterator.
- *
- * @param values the messages to add
- * @return the builder
- */
- public RepeatedFieldBuilderV3<MType, BType, IType> addAllMessages(
- Iterable<? extends MType> values) {
- for (final MType value : values) {
- if (value == null) {
- throw new NullPointerException();
- }
- }
-
- // If we can inspect the size, we can more efficiently add messages.
- int size = -1;
- if (values instanceof Collection) {
- @SuppressWarnings("unchecked") final
- Collection<MType> collection = (Collection<MType>) values;
- if (collection.size() == 0) {
- return this;
- }
- size = collection.size();
- }
- ensureMutableMessageList();
-
- if (size >= 0 && messages instanceof ArrayList) {
- ((ArrayList<MType>) messages)
- .ensureCapacity(messages.size() + size);
- }
-
- for (MType value : values) {
- addMessage(value);
- }
-
- onChanged();
- incrementModCounts();
- return this;
- }
-
- /**
- * Appends a new builder to the end of this list and returns the builder.
- *
- * @param message the message to add which is the basis of the builder
- * @return the new builder
- */
- public BType addBuilder(MType message) {
- ensureMutableMessageList();
- ensureBuilders();
- SingleFieldBuilderV3<MType, BType, IType> builder =
- new SingleFieldBuilderV3<MType, BType, IType>(
- message, this, isClean);
- messages.add(null);
- builders.add(builder);
- onChanged();
- incrementModCounts();
- return builder.getBuilder();
- }
-
- /**
- * Inserts a new builder at the specified position in this list.
- * Shifts the element currently at that position (if any) and any subsequent
- * elements to the right (adds one to their indices).
- *
- * @param index the index at which to insert the builder
- * @param message the message to add which is the basis of the builder
- * @return the builder
- */
- public BType addBuilder(int index, MType message) {
- ensureMutableMessageList();
- ensureBuilders();
- SingleFieldBuilderV3<MType, BType, IType> builder =
- new SingleFieldBuilderV3<MType, BType, IType>(
- message, this, isClean);
- messages.add(index, null);
- builders.add(index, builder);
- onChanged();
- incrementModCounts();
- return builder.getBuilder();
- }
-
- /**
- * Removes the element at the specified position in this list. Shifts any
- * subsequent elements to the left (subtracts one from their indices).
- * Returns the element that was removed from the list.
- *
- * @param index the index at which to remove the message
- */
- public void remove(int index) {
- ensureMutableMessageList();
- messages.remove(index);
- if (builders != null) {
- SingleFieldBuilderV3<MType, BType, IType> entry =
- builders.remove(index);
- if (entry != null) {
- entry.dispose();
- }
- }
- onChanged();
- incrementModCounts();
- }
-
- /**
- * Removes all of the elements from this list.
- * The list will be empty after this call returns.
- */
- public void clear() {
- messages = Collections.emptyList();
- isMessagesListMutable = false;
- if (builders != null) {
- for (SingleFieldBuilderV3<MType, BType, IType> entry :
- builders) {
- if (entry != null) {
- entry.dispose();
- }
- }
- builders = null;
- }
- onChanged();
- incrementModCounts();
- }
-
- /**
- * Builds the list of messages from the builder and returns them.
- *
- * @return an immutable list of messages
- */
- public List<MType> build() {
- // Now that build has been called, we are required to dispatch
- // invalidations.
- isClean = true;
-
- if (!isMessagesListMutable && builders == null) {
- // We still have an immutable list and we never created a builder.
- return messages;
- }
-
- boolean allMessagesInSync = true;
- if (!isMessagesListMutable) {
- // We still have an immutable list. Let's see if any of them are out
- // of sync with their builders.
- for (int i = 0; i < messages.size(); i++) {
- Message message = messages.get(i);
- SingleFieldBuilderV3<MType, BType, IType> builder = builders.get(i);
- if (builder != null) {
- if (builder.build() != message) {
- allMessagesInSync = false;
- break;
- }
- }
- }
- if (allMessagesInSync) {
- // Immutable list is still in sync.
- return messages;
- }
- }
-
- // Need to make sure messages is up to date
- ensureMutableMessageList();
- for (int i = 0; i < messages.size(); i++) {
- messages.set(i, getMessage(i, true));
- }
-
- // We're going to return our list as immutable so we mark that we can
- // no longer update it.
- messages = Collections.unmodifiableList(messages);
- isMessagesListMutable = false;
- return messages;
- }
-
- /**
- * Gets a view of the builder as a list of messages. The returned list is live
- * and will reflect any changes to the underlying builder.
- *
- * @return the messages in the list
- */
- public List<MType> getMessageList() {
- if (externalMessageList == null) {
- externalMessageList =
- new MessageExternalList<MType, BType, IType>(this);
- }
- return externalMessageList;
- }
-
- /**
- * Gets a view of the builder as a list of builders. This returned list is
- * live and will reflect any changes to the underlying builder.
- *
- * @return the builders in the list
- */
- public List<BType> getBuilderList() {
- if (externalBuilderList == null) {
- externalBuilderList =
- new BuilderExternalList<MType, BType, IType>(this);
- }
- return externalBuilderList;
- }
-
- /**
- * Gets a view of the builder as a list of MessageOrBuilders. This returned
- * list is live and will reflect any changes to the underlying builder.
- *
- * @return the builders in the list
- */
- public List<IType> getMessageOrBuilderList() {
- if (externalMessageOrBuilderList == null) {
- externalMessageOrBuilderList =
- new MessageOrBuilderExternalList<MType, BType, IType>(this);
- }
- return externalMessageOrBuilderList;
- }
-
- /**
- * Called when a the builder or one of its nested children has changed
- * and any parent should be notified of its invalidation.
- */
- private void onChanged() {
- if (isClean && parent != null) {
- parent.markDirty();
-
- // Don't keep dispatching invalidations until build is called again.
- isClean = false;
- }
- }
-
- @Override
- public void markDirty() {
- onChanged();
- }
-
- /**
- * Increments the mod counts so that an ConcurrentModificationException can
- * be thrown if calling code tries to modify the builder while its iterating
- * the list.
- */
- private void incrementModCounts() {
- if (externalMessageList != null) {
- externalMessageList.incrementModCount();
- }
- if (externalBuilderList != null) {
- externalBuilderList.incrementModCount();
- }
- if (externalMessageOrBuilderList != null) {
- externalMessageOrBuilderList.incrementModCount();
- }
- }
-
- /**
- * Provides a live view of the builder as a list of messages.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class MessageExternalList<
- MType extends AbstractMessage,
- BType extends AbstractMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<MType> implements List<MType> {
-
- RepeatedFieldBuilderV3<MType, BType, IType> builder;
-
- MessageExternalList(
- RepeatedFieldBuilderV3<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public MType get(int index) {
- return builder.getMessage(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-
- /**
- * Provides a live view of the builder as a list of builders.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class BuilderExternalList<
- MType extends AbstractMessage,
- BType extends AbstractMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<BType> implements List<BType> {
-
- RepeatedFieldBuilderV3<MType, BType, IType> builder;
-
- BuilderExternalList(
- RepeatedFieldBuilderV3<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public BType get(int index) {
- return builder.getBuilder(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-
- /**
- * Provides a live view of the builder as a list of builders.
- *
- * @param <MType> the type of message for the field
- * @param <BType> the type of builder for the field
- * @param <IType> the common interface for the message and the builder
- */
- private static class MessageOrBuilderExternalList<
- MType extends AbstractMessage,
- BType extends AbstractMessage.Builder,
- IType extends MessageOrBuilder>
- extends AbstractList<IType> implements List<IType> {
-
- RepeatedFieldBuilderV3<MType, BType, IType> builder;
-
- MessageOrBuilderExternalList(
- RepeatedFieldBuilderV3<MType, BType, IType> builder) {
- this.builder = builder;
- }
-
- @Override
- public int size() {
- return this.builder.getCount();
- }
-
- @Override
- public IType get(int index) {
- return builder.getMessageOrBuilder(index);
- }
-
- void incrementModCount() {
- modCount++;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a6de1bd/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RopeByteString.java
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RopeByteString.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RopeByteString.java
deleted file mode 100644
index a67ed34..0000000
--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RopeByteString.java
+++ /dev/null
@@ -1,897 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package org.apache.hadoop.hbase.shaded.com.google.protobuf;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Stack;
-
-/**
- * Class to represent {@code ByteStrings} formed by concatenation of other
- * ByteStrings, without copying the data in the pieces. The concatenation is
- * represented as a tree whose leaf nodes are each a
- * {@link org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString.LeafByteString}.
- *
- * <p>Most of the operation here is inspired by the now-famous paper <a
- * href="https://web.archive.org/web/20060202015456/http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol25/issue12/spe986.pdf">
- * BAP95 </a> Ropes: an Alternative to Strings hans-j. boehm, russ atkinson and
- * michael plass
- *
- * <p>The algorithms described in the paper have been implemented for character
- * strings in {@code com.google.common.string.Rope} and in the c++ class {@code
- * cord.cc}.
- *
- * <p>Fundamentally the Rope algorithm represents the collection of pieces as a
- * binary tree. BAP95 uses a Fibonacci bound relating depth to a minimum
- * sequence length, sequences that are too short relative to their depth cause a
- * tree rebalance. More precisely, a tree of depth d is "balanced" in the
- * terminology of BAP95 if its length is at least F(d+2), where F(n) is the
- * n-the Fibonacci number. Thus for depths 0, 1, 2, 3, 4, 5,... we have minimum
- * lengths 1, 2, 3, 5, 8, 13,...
- *
- * @author carlanton@google.com (Carl Haverl)
- */
-final class RopeByteString extends ByteString {
-
- /**
- * BAP95. Let Fn be the nth Fibonacci number. A {@link RopeByteString} of
- * depth n is "balanced", i.e flat enough, if its length is at least Fn+2,
- * e.g. a "balanced" {@link RopeByteString} of depth 1 must have length at
- * least 2, of depth 4 must have length >= 8, etc.
- *
- * <p>There's nothing special about using the Fibonacci numbers for this, but
- * they are a reasonable sequence for encapsulating the idea that we are OK
- * with longer strings being encoded in deeper binary trees.
- *
- * <p>For 32-bit integers, this array has length 46.
- */
- private static final int[] minLengthByDepth;
-
- static {
- // Dynamically generate the list of Fibonacci numbers the first time this
- // class is accessed.
- List<Integer> numbers = new ArrayList<Integer>();
-
- // we skip the first Fibonacci number (1). So instead of: 1 1 2 3 5 8 ...
- // we have: 1 2 3 5 8 ...
- int f1 = 1;
- int f2 = 1;
-
- // get all the values until we roll over.
- while (f2 > 0) {
- numbers.add(f2);
- int temp = f1 + f2;
- f1 = f2;
- f2 = temp;
- }
-
- // we include this here so that we can index this array to [x + 1] in the
- // loops below.
- numbers.add(Integer.MAX_VALUE);
- minLengthByDepth = new int[numbers.size()];
- for (int i = 0; i < minLengthByDepth.length; i++) {
- // unbox all the values
- minLengthByDepth[i] = numbers.get(i);
- }
- }
-
- private final int totalLength;
- private final ByteString left;
- private final ByteString right;
- private final int leftLength;
- private final int treeDepth;
-
- /**
- * Create a new RopeByteString, which can be thought of as a new tree node, by
- * recording references to the two given strings.
- *
- * @param left string on the left of this node, should have {@code size() >
- * 0}
- * @param right string on the right of this node, should have {@code size() >
- * 0}
- */
- private RopeByteString(ByteString left, ByteString right) {
- this.left = left;
- this.right = right;
- leftLength = left.size();
- totalLength = leftLength + right.size();
- treeDepth = Math.max(left.getTreeDepth(), right.getTreeDepth()) + 1;
- }
-
- /**
- * Concatenate the given strings while performing various optimizations to
- * slow the growth rate of tree depth and tree node count. The result is
- * either a {@link org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString.LeafByteString} or a
- * {@link RopeByteString} depending on which optimizations, if any, were
- * applied.
- *
- * <p>Small pieces of length less than {@link
- * ByteString#CONCATENATE_BY_COPY_SIZE} may be copied by value here, as in
- * BAP95. Large pieces are referenced without copy.
- *
- * @param left string on the left
- * @param right string on the right
- * @return concatenation representing the same sequence as the given strings
- */
- static ByteString concatenate(ByteString left, ByteString right) {
- if (right.size() == 0) {
- return left;
- }
-
- if (left.size() == 0) {
- return right;
- }
-
- final int newLength = left.size() + right.size();
- if (newLength < ByteString.CONCATENATE_BY_COPY_SIZE) {
- // Optimization from BAP95: For short (leaves in paper, but just short
- // here) total length, do a copy of data to a new leaf.
- return concatenateBytes(left, right);
- }
-
- if (left instanceof RopeByteString) {
- final RopeByteString leftRope = (RopeByteString) left;
- if (leftRope.right.size() + right.size() < CONCATENATE_BY_COPY_SIZE) {
- // Optimization from BAP95: As an optimization of the case where the
- // ByteString is constructed by repeated concatenate, recognize the case
- // where a short string is concatenated to a left-hand node whose
- // right-hand branch is short. In the paper this applies to leaves, but
- // we just look at the length here. This has the advantage of shedding
- // references to unneeded data when substrings have been taken.
- //
- // When we recognize this case, we do a copy of the data and create a
- // new parent node so that the depth of the result is the same as the
- // given left tree.
- ByteString newRight = concatenateBytes(leftRope.right, right);
- return new RopeByteString(leftRope.left, newRight);
- }
-
- if (leftRope.left.getTreeDepth() > leftRope.right.getTreeDepth()
- && leftRope.getTreeDepth() > right.getTreeDepth()) {
- // Typically for concatenate-built strings the left-side is deeper than
- // the right. This is our final attempt to concatenate without
- // increasing the tree depth. We'll redo the node on the RHS. This
- // is yet another optimization for building the string by repeatedly
- // concatenating on the right.
- ByteString newRight = new RopeByteString(leftRope.right, right);
- return new RopeByteString(leftRope.left, newRight);
- }
- }
-
- // Fine, we'll add a node and increase the tree depth--unless we rebalance ;^)
- int newDepth = Math.max(left.getTreeDepth(), right.getTreeDepth()) + 1;
- if (newLength >= minLengthByDepth[newDepth]) {
- // The tree is shallow enough, so don't rebalance
- return new RopeByteString(left, right);
- }
-
- return new Balancer().balance(left, right);
- }
-
- /**
- * Concatenates two strings by copying data values. This is called in a few
- * cases in order to reduce the growth of the number of tree nodes.
- *
- * @param left string on the left
- * @param right string on the right
- * @return string formed by copying data bytes
- */
- private static ByteString concatenateBytes(ByteString left,
- ByteString right) {
- int leftSize = left.size();
- int rightSize = right.size();
- byte[] bytes = new byte[leftSize + rightSize];
- left.copyTo(bytes, 0, 0, leftSize);
- right.copyTo(bytes, 0, leftSize, rightSize);
- return ByteString.wrap(bytes); // Constructor wraps bytes
- }
-
- /**
- * Create a new RopeByteString for testing only while bypassing all the
- * defenses of {@link #concatenate(ByteString, ByteString)}. This allows
- * testing trees of specific structure. We are also able to insert empty
- * leaves, though these are dis-allowed, so that we can make sure the
- * implementation can withstand their presence.
- *
- * @param left string on the left of this node
- * @param right string on the right of this node
- * @return an unsafe instance for testing only
- */
- static RopeByteString newInstanceForTest(ByteString left, ByteString right) {
- return new RopeByteString(left, right);
- }
-
- /**
- * Gets the byte at the given index.
- * Throws {@link ArrayIndexOutOfBoundsException} for backwards-compatibility
- * reasons although it would more properly be {@link
- * IndexOutOfBoundsException}.
- *
- * @param index index of byte
- * @return the value
- * @throws ArrayIndexOutOfBoundsException {@code index} is < 0 or >= size
- */
- @Override
- public byte byteAt(int index) {
- checkIndex(index, totalLength);
-
- // Find the relevant piece by recursive descent
- if (index < leftLength) {
- return left.byteAt(index);
- }
-
- return right.byteAt(index - leftLength);
- }
-
- @Override
- public int size() {
- return totalLength;
- }
-
- // =================================================================
- // Pieces
-
- @Override
- protected int getTreeDepth() {
- return treeDepth;
- }
-
- /**
- * Determines if the tree is balanced according to BAP95, which means the tree
- * is flat-enough with respect to the bounds. Note that this definition of
- * balanced is one where sub-trees of balanced trees are not necessarily
- * balanced.
- *
- * @return true if the tree is balanced
- */
- @Override
- protected boolean isBalanced() {
- return totalLength >= minLengthByDepth[treeDepth];
- }
-
- /**
- * Takes a substring of this one. This involves recursive descent along the
- * left and right edges of the substring, and referencing any wholly contained
- * segments in between. Any leaf nodes entirely uninvolved in the substring
- * will not be referenced by the substring.
- *
- * <p>Substrings of {@code length < 2} should result in at most a single
- * recursive call chain, terminating at a leaf node. Thus the result will be a
- * {@link org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString.LeafByteString}.
- *
- * @param beginIndex start at this index
- * @param endIndex the last character is the one before this index
- * @return substring leaf node or tree
- */
- @Override
- public ByteString substring(int beginIndex, int endIndex) {
- final int length = checkRange(beginIndex, endIndex, totalLength);
-
- if (length == 0) {
- // Empty substring
- return ByteString.EMPTY;
- }
-
- if (length == totalLength) {
- // The whole string
- return this;
- }
-
- // Proper substring
- if (endIndex <= leftLength) {
- // Substring on the left
- return left.substring(beginIndex, endIndex);
- }
-
- if (beginIndex >= leftLength) {
- // Substring on the right
- return right.substring(beginIndex - leftLength, endIndex - leftLength);
- }
-
- // Split substring
- ByteString leftSub = left.substring(beginIndex);
- ByteString rightSub = right.substring(0, endIndex - leftLength);
- // Intentionally not rebalancing, since in many cases these two
- // substrings will already be less deep than the top-level
- // RopeByteString we're taking a substring of.
- return new RopeByteString(leftSub, rightSub);
- }
-
- // =================================================================
- // ByteString -> byte[]
-
- @Override
- protected void copyToInternal(byte[] target, int sourceOffset,
- int targetOffset, int numberToCopy) {
- if (sourceOffset + numberToCopy <= leftLength) {
- left.copyToInternal(target, sourceOffset, targetOffset, numberToCopy);
- } else if (sourceOffset >= leftLength) {
- right.copyToInternal(target, sourceOffset - leftLength, targetOffset,
- numberToCopy);
- } else {
- int leftLength = this.leftLength - sourceOffset;
- left.copyToInternal(target, sourceOffset, targetOffset, leftLength);
- right.copyToInternal(target, 0, targetOffset + leftLength,
- numberToCopy - leftLength);
- }
- }
-
- @Override
- public void copyTo(ByteBuffer target) {
- left.copyTo(target);
- right.copyTo(target);
- }
-
- @Override
- public ByteBuffer asReadOnlyByteBuffer() {
- ByteBuffer byteBuffer = ByteBuffer.wrap(toByteArray());
- return byteBuffer.asReadOnlyBuffer();
- }
-
- @Override
- public List<ByteBuffer> asReadOnlyByteBufferList() {
- // Walk through the list of LeafByteString's that make up this
- // rope, and add each one as a read-only ByteBuffer.
- List<ByteBuffer> result = new ArrayList<ByteBuffer>();
- PieceIterator pieces = new PieceIterator(this);
- while (pieces.hasNext()) {
- LeafByteString byteString = pieces.next();
- result.add(byteString.asReadOnlyByteBuffer());
- }
- return result;
- }
-
- @Override
- public void writeTo(OutputStream outputStream) throws IOException {
- left.writeTo(outputStream);
- right.writeTo(outputStream);
- }
-
- @Override
- void writeToInternal(OutputStream out, int sourceOffset,
- int numberToWrite) throws IOException {
- if (sourceOffset + numberToWrite <= leftLength) {
- left.writeToInternal(out, sourceOffset, numberToWrite);
- } else if (sourceOffset >= leftLength) {
- right.writeToInternal(out, sourceOffset - leftLength, numberToWrite);
- } else {
- int numberToWriteInLeft = leftLength - sourceOffset;
- left.writeToInternal(out, sourceOffset, numberToWriteInLeft);
- right.writeToInternal(out, 0, numberToWrite - numberToWriteInLeft);
- }
- }
-
- @Override
- void writeTo(ByteOutput output) throws IOException {
- left.writeTo(output);
- right.writeTo(output);
- }
-
-
- @Override
- protected String toStringInternal(Charset charset) {
- return new String(toByteArray(), charset);
- }
-
- // =================================================================
- // UTF-8 decoding
-
- @Override
- public boolean isValidUtf8() {
- int leftPartial = left.partialIsValidUtf8(Utf8.COMPLETE, 0, leftLength);
- int state = right.partialIsValidUtf8(leftPartial, 0, right.size());
- return state == Utf8.COMPLETE;
- }
-
- @Override
- protected int partialIsValidUtf8(int state, int offset, int length) {
- int toIndex = offset + length;
- if (toIndex <= leftLength) {
- return left.partialIsValidUtf8(state, offset, length);
- } else if (offset >= leftLength) {
- return right.partialIsValidUtf8(state, offset - leftLength, length);
- } else {
- int leftLength = this.leftLength - offset;
- int leftPartial = left.partialIsValidUtf8(state, offset, leftLength);
- return right.partialIsValidUtf8(leftPartial, 0, length - leftLength);
- }
- }
-
- // =================================================================
- // equals() and hashCode()
-
- @Override
- public boolean equals(Object other) {
- if (other == this) {
- return true;
- }
- if (!(other instanceof ByteString)) {
- return false;
- }
-
- ByteString otherByteString = (ByteString) other;
- if (totalLength != otherByteString.size()) {
- return false;
- }
- if (totalLength == 0) {
- return true;
- }
-
- // You don't really want to be calling equals on long strings, but since
- // we cache the hashCode, we effectively cache inequality. We use the cached
- // hashCode if it's already computed. It's arguable we should compute the
- // hashCode here, and if we're going to be testing a bunch of byteStrings,
- // it might even make sense.
- int thisHash = peekCachedHashCode();
- int thatHash = otherByteString.peekCachedHashCode();
- if (thisHash != 0 && thatHash != 0 && thisHash != thatHash) {
- return false;
- }
-
- return equalsFragments(otherByteString);
- }
-
- /**
- * Determines if this string is equal to another of the same length by
- * iterating over the leaf nodes. On each step of the iteration, the
- * overlapping segments of the leaves are compared.
- *
- * @param other string of the same length as this one
- * @return true if the values of this string equals the value of the given
- * one
- */
- private boolean equalsFragments(ByteString other) {
- int thisOffset = 0;
- Iterator<LeafByteString> thisIter = new PieceIterator(this);
- LeafByteString thisString = thisIter.next();
-
- int thatOffset = 0;
- Iterator<LeafByteString> thatIter = new PieceIterator(other);
- LeafByteString thatString = thatIter.next();
-
- int pos = 0;
- while (true) {
- int thisRemaining = thisString.size() - thisOffset;
- int thatRemaining = thatString.size() - thatOffset;
- int bytesToCompare = Math.min(thisRemaining, thatRemaining);
-
- // At least one of the offsets will be zero
- boolean stillEqual = (thisOffset == 0)
- ? thisString.equalsRange(thatString, thatOffset, bytesToCompare)
- : thatString.equalsRange(thisString, thisOffset, bytesToCompare);
- if (!stillEqual) {
- return false;
- }
-
- pos += bytesToCompare;
- if (pos >= totalLength) {
- if (pos == totalLength) {
- return true;
- }
- throw new IllegalStateException();
- }
- // We always get to the end of at least one of the pieces
- if (bytesToCompare == thisRemaining) { // If reached end of this
- thisOffset = 0;
- thisString = thisIter.next();
- } else {
- thisOffset += bytesToCompare;
- }
- if (bytesToCompare == thatRemaining) { // If reached end of that
- thatOffset = 0;
- thatString = thatIter.next();
- } else {
- thatOffset += bytesToCompare;
- }
- }
- }
-
- @Override
- protected int partialHash(int h, int offset, int length) {
- int toIndex = offset + length;
- if (toIndex <= leftLength) {
- return left.partialHash(h, offset, length);
- } else if (offset >= leftLength) {
- return right.partialHash(h, offset - leftLength, length);
- } else {
- int leftLength = this.leftLength - offset;
- int leftPartial = left.partialHash(h, offset, leftLength);
- return right.partialHash(leftPartial, 0, length - leftLength);
- }
- }
-
- // =================================================================
- // Input stream
-
- @Override
- public CodedInputStream newCodedInput() {
- return CodedInputStream.newInstance(new RopeInputStream());
- }
-
- @Override
- public InputStream newInput() {
- return new RopeInputStream();
- }
-
- /**
- * This class implements the balancing algorithm of BAP95. In the paper the
- * authors use an array to keep track of pieces, while here we use a stack.
- * The tree is balanced by traversing subtrees in left to right order, and the
- * stack always contains the part of the string we've traversed so far.
- *
- * <p>One surprising aspect of the algorithm is the result of balancing is not
- * necessarily balanced, though it is nearly balanced. For details, see
- * BAP95.
- */
- private static class Balancer {
- // Stack containing the part of the string, starting from the left, that
- // we've already traversed. The final string should be the equivalent of
- // concatenating the strings on the stack from bottom to top.
- private final Stack<ByteString> prefixesStack = new Stack<ByteString>();
-
- private ByteString balance(ByteString left, ByteString right) {
- doBalance(left);
- doBalance(right);
-
- // Sweep stack to gather the result
- ByteString partialString = prefixesStack.pop();
- while (!prefixesStack.isEmpty()) {
- ByteString newLeft = prefixesStack.pop();
- partialString = new RopeByteString(newLeft, partialString);
- }
- // We should end up with a RopeByteString since at a minimum we will
- // create one from concatenating left and right
- return partialString;
- }
-
- private void doBalance(ByteString root) {
- // BAP95: Insert balanced subtrees whole. This means the result might not
- // be balanced, leading to repeated rebalancings on concatenate. However,
- // these rebalancings are shallow due to ignoring balanced subtrees, and
- // relatively few calls to insert() result.
- if (root.isBalanced()) {
- insert(root);
- } else if (root instanceof RopeByteString) {
- RopeByteString rbs = (RopeByteString) root;
- doBalance(rbs.left);
- doBalance(rbs.right);
- } else {
- throw new IllegalArgumentException(
- "Has a new type of ByteString been created? Found " +
- root.getClass());
- }
- }
-
- /**
- * Push a string on the balance stack (BAP95). BAP95 uses an array and
- * calls the elements in the array 'bins'. We instead use a stack, so the
- * 'bins' of lengths are represented by differences between the elements of
- * minLengthByDepth.
- *
- * <p>If the length bin for our string, and all shorter length bins, are
- * empty, we just push it on the stack. Otherwise, we need to start
- * concatenating, putting the given string in the "middle" and continuing
- * until we land in an empty length bin that matches the length of our
- * concatenation.
- *
- * @param byteString string to place on the balance stack
- */
- private void insert(ByteString byteString) {
- int depthBin = getDepthBinForLength(byteString.size());
- int binEnd = minLengthByDepth[depthBin + 1];
-
- // BAP95: Concatenate all trees occupying bins representing the length of
- // our new piece or of shorter pieces, to the extent that is possible.
- // The goal is to clear the bin which our piece belongs in, but that may
- // not be entirely possible if there aren't enough longer bins occupied.
- if (prefixesStack.isEmpty() || prefixesStack.peek().size() >= binEnd) {
- prefixesStack.push(byteString);
- } else {
- int binStart = minLengthByDepth[depthBin];
-
- // Concatenate the subtrees of shorter length
- ByteString newTree = prefixesStack.pop();
- while (!prefixesStack.isEmpty()
- && prefixesStack.peek().size() < binStart) {
- ByteString left = prefixesStack.pop();
- newTree = new RopeByteString(left, newTree);
- }
-
- // Concatenate the given string
- newTree = new RopeByteString(newTree, byteString);
-
- // Continue concatenating until we land in an empty bin
- while (!prefixesStack.isEmpty()) {
- depthBin = getDepthBinForLength(newTree.size());
- binEnd = minLengthByDepth[depthBin + 1];
- if (prefixesStack.peek().size() < binEnd) {
- ByteString left = prefixesStack.pop();
- newTree = new RopeByteString(left, newTree);
- } else {
- break;
- }
- }
- prefixesStack.push(newTree);
- }
- }
-
- private int getDepthBinForLength(int length) {
- int depth = Arrays.binarySearch(minLengthByDepth, length);
- if (depth < 0) {
- // It wasn't an exact match, so convert to the index of the containing
- // fragment, which is one less even than the insertion point.
- int insertionPoint = -(depth + 1);
- depth = insertionPoint - 1;
- }
-
- return depth;
- }
- }
-
- /**
- * This class is a continuable tree traversal, which keeps the state
- * information which would exist on the stack in a recursive traversal instead
- * on a stack of "Bread Crumbs". The maximum depth of the stack in this
- * iterator is the same as the depth of the tree being traversed.
- *
- * <p>This iterator is used to implement
- * {@link RopeByteString#equalsFragments(ByteString)}.
- */
- private static class PieceIterator implements Iterator<LeafByteString> {
-
- private final Stack<RopeByteString> breadCrumbs =
- new Stack<RopeByteString>();
- private LeafByteString next;
-
- private PieceIterator(ByteString root) {
- next = getLeafByLeft(root);
- }
-
- private LeafByteString getLeafByLeft(ByteString root) {
- ByteString pos = root;
- while (pos instanceof RopeByteString) {
- RopeByteString rbs = (RopeByteString) pos;
- breadCrumbs.push(rbs);
- pos = rbs.left;
- }
- return (LeafByteString) pos;
- }
-
- private LeafByteString getNextNonEmptyLeaf() {
- while (true) {
- // Almost always, we go through this loop exactly once. However, if
- // we discover an empty string in the rope, we toss it and try again.
- if (breadCrumbs.isEmpty()) {
- return null;
- } else {
- LeafByteString result = getLeafByLeft(breadCrumbs.pop().right);
- if (!result.isEmpty()) {
- return result;
- }
- }
- }
- }
-
- @Override
- public boolean hasNext() {
- return next != null;
- }
-
- /**
- * Returns the next item and advances one
- * {@link org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString.LeafByteString}.
- *
- * @return next non-empty LeafByteString or {@code null}
- */
- @Override
- public LeafByteString next() {
- if (next == null) {
- throw new NoSuchElementException();
- }
- LeafByteString result = next;
- next = getNextNonEmptyLeaf();
- return result;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- // =================================================================
- // Serializable
-
- private static final long serialVersionUID = 1L;
-
- Object writeReplace() {
- return ByteString.wrap(toByteArray());
- }
-
- private void readObject(@SuppressWarnings("unused") ObjectInputStream in) throws IOException {
- throw new InvalidObjectException(
- "RopeByteStream instances are not to be serialized directly");
- }
-
- /**
- * This class is the {@link RopeByteString} equivalent for
- * {@link ByteArrayInputStream}.
- */
- private class RopeInputStream extends InputStream {
- // Iterates through the pieces of the rope
- private PieceIterator pieceIterator;
- // The current piece
- private LeafByteString currentPiece;
- // The size of the current piece
- private int currentPieceSize;
- // The index of the next byte to read in the current piece
- private int currentPieceIndex;
- // The offset of the start of the current piece in the rope byte string
- private int currentPieceOffsetInRope;
- // Offset in the buffer at which user called mark();
- private int mark;
-
- public RopeInputStream() {
- initialize();
- }
-
- @Override
- public int read(byte b[], int offset, int length) {
- if (b == null) {
- throw new NullPointerException();
- } else if (offset < 0 || length < 0 || length > b.length - offset) {
- throw new IndexOutOfBoundsException();
- }
- return readSkipInternal(b, offset, length);
- }
-
- @Override
- public long skip(long length) {
- if (length < 0) {
- throw new IndexOutOfBoundsException();
- } else if (length > Integer.MAX_VALUE) {
- length = Integer.MAX_VALUE;
- }
- return readSkipInternal(null, 0, (int) length);
- }
-
- /**
- * Internal implementation of read and skip. If b != null, then read the
- * next {@code length} bytes into the buffer {@code b} at
- * offset {@code offset}. If b == null, then skip the next {@code length}
- * bytes.
- * <p>
- * This method assumes that all error checking has already happened.
- * <p>
- * Returns the actual number of bytes read or skipped.
- */
- private int readSkipInternal(byte b[], int offset, int length) {
- int bytesRemaining = length;
- while (bytesRemaining > 0) {
- advanceIfCurrentPieceFullyRead();
- if (currentPiece == null) {
- if (bytesRemaining == length) {
- // We didn't manage to read anything
- return -1;
- }
- break;
- } else {
- // Copy the bytes from this piece.
- int currentPieceRemaining = currentPieceSize - currentPieceIndex;
- int count = Math.min(currentPieceRemaining, bytesRemaining);
- if (b != null) {
- currentPiece.copyTo(b, currentPieceIndex, offset, count);
- offset += count;
- }
- currentPieceIndex += count;
- bytesRemaining -= count;
- }
- }
- // Return the number of bytes read.
- return length - bytesRemaining;
- }
-
- @Override
- public int read() throws IOException {
- advanceIfCurrentPieceFullyRead();
- if (currentPiece == null) {
- return -1;
- } else {
- return currentPiece.byteAt(currentPieceIndex++) & 0xFF;
- }
- }
-
- @Override
- public int available() throws IOException {
- int bytesRead = currentPieceOffsetInRope + currentPieceIndex;
- return RopeByteString.this.size() - bytesRead;
- }
-
- @Override
- public boolean markSupported() {
- return true;
- }
-
- @Override
- public void mark(int readAheadLimit) {
- // Set the mark to our position in the byte string
- mark = currentPieceOffsetInRope + currentPieceIndex;
- }
-
- @Override
- public synchronized void reset() {
- // Just reinitialize and skip the specified number of bytes.
- initialize();
- readSkipInternal(null, 0, mark);
- }
-
- /** Common initialization code used by both the constructor and reset() */
- private void initialize() {
- pieceIterator = new PieceIterator(RopeByteString.this);
- currentPiece = pieceIterator.next();
- currentPieceSize = currentPiece.size();
- currentPieceIndex = 0;
- currentPieceOffsetInRope = 0;
- }
-
- /**
- * Skips to the next piece if we have read all the data in the current
- * piece. Sets currentPiece to null if we have reached the end of the
- * input.
- */
- private void advanceIfCurrentPieceFullyRead() {
- if (currentPiece != null && currentPieceIndex == currentPieceSize) {
- // Generally, we can only go through this loop at most once, since
- // empty strings can't end up in a rope. But better to test.
- currentPieceOffsetInRope += currentPieceSize;
- currentPieceIndex = 0;
- if (pieceIterator.hasNext()) {
- currentPiece = pieceIterator.next();
- currentPieceSize = currentPiece.size();
- } else {
- currentPiece = null;
- currentPieceSize = 0;
- }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a6de1bd/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcCallback.java
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcCallback.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcCallback.java
deleted file mode 100644
index dc30060..0000000
--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcCallback.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package org.apache.hadoop.hbase.shaded.com.google.protobuf;
-
-/**
- * Interface for an RPC callback, normally called when an RPC completes.
- * {@code ParameterType} is normally the method's response message type.
- *
- * <p>Starting with version 2.3.0, RPC implementations should not try to build
- * on this, but should instead provide code generator plugins which generate
- * code specific to the particular RPC implementation. This way the generated
- * code can be more appropriate for the implementation in use and can avoid
- * unnecessary layers of indirection.
- *
- * @author kenton@google.com Kenton Varda
- */
-public interface RpcCallback<ParameterType> {
- void run(ParameterType parameter);
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a6de1bd/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcChannel.java
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcChannel.java b/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcChannel.java
deleted file mode 100644
index bf10784..0000000
--- a/hbase-protocol-shaded/src/main/java/org/apache/hadoop/hbase/shaded/com/google/protobuf/RpcChannel.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package org.apache.hadoop.hbase.shaded.com.google.protobuf;
-
-/**
- * <p>Abstract interface for an RPC channel. An {@code RpcChannel} represents a
- * communication line to a {@link Service} which can be used to call that
- * {@link Service}'s methods. The {@link Service} may be running on another
- * machine. Normally, you should not call an {@code RpcChannel} directly, but
- * instead construct a stub {@link Service} wrapping it. Example:
- *
- * <pre>
- * RpcChannel channel = rpcImpl.newChannel("remotehost.example.com:1234");
- * RpcController controller = rpcImpl.newController();
- * MyService service = MyService.newStub(channel);
- * service.myMethod(controller, request, callback);
- * </pre>
- *
- * <p>Starting with version 2.3.0, RPC implementations should not try to build
- * on this, but should instead provide code generator plugins which generate
- * code specific to the particular RPC implementation. This way the generated
- * code can be more appropriate for the implementation in use and can avoid
- * unnecessary layers of indirection.
- *
- * @author kenton@google.com Kenton Varda
- */
-public interface RpcChannel {
- /**
- * Call the given method of the remote service. This method is similar to
- * {@code Service.callMethod()} with one important difference: the caller
- * decides the types of the {@code Message} objects, not the callee. The
- * request may be of any type as long as
- * {@code request.getDescriptor() == method.getInputType()}.
- * The response passed to the callback will be of the same type as
- * {@code responsePrototype} (which must have
- * {@code getDescriptor() == method.getOutputType()}).
- */
- void callMethod(Descriptors.MethodDescriptor method,
- RpcController controller,
- Message request,
- Message responsePrototype,
- RpcCallback<Message> done);
-}