This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch elasticity
in repository https://gitbox.apache.org/repos/asf/accumulo.git

commit 51004f656a9b4eaa4f6a8238ca3b0b6e34545bc1
Merge: 2f894ae50b dc0d4f3132
Author: Dave Marion <dlmar...@apache.org>
AuthorDate: Tue Nov 28 21:32:24 2023 +0000

    Merge branch 'main' into elasticity

 .../core/metadata/schema/RootTabletMetadata.java   |  67 ++-----
 .../metadata/schema/RootTabletMetadataTest.java    | 119 -------------
 .../accumulo/manager/upgrade/Upgrader11to12.java   |  55 ++++--
 .../manager/upgrade/Upgrader11to12Test.java        | 195 ++++++++++-----------
 4 files changed, 140 insertions(+), 296 deletions(-)

diff --cc 
core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java
index c5144bb9c4,19285bebdb..f96d0f77c2
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java
@@@ -40,9 -39,8 +40,6 @@@ import org.apache.accumulo.core.metadat
  import 
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily;
  import 
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.FutureLocationColumnFamily;
  import org.apache.hadoop.io.Text;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
  
  /**
   * This class is used to serialize and deserialize root tablet metadata using 
GSon. The only data
@@@ -52,7 -50,7 +49,6 @@@
   */
  public class RootTabletMetadata {
  
--  private static final Logger log = 
LoggerFactory.getLogger(RootTabletMetadata.class);
    private static final CharsetDecoder UTF8_error_detecting_decoder = 
UTF_8.newDecoder();
    private static final Predicate<Entry<String,TreeMap<String,String>>> 
isLocationCF = e -> {
      String fam = e.getKey();
@@@ -195,31 -155,24 +153,30 @@@
      }
    }
  
 -  public Stream<SimpleImmutableEntry<Key,Value>> toKeyValues() {
++  public Stream<SimpleImmutableEntry<Key,Value>> getKeyValues() {
+     String row = RootTable.EXTENT.toMetaRow().toString();
+     return data.columnValues.entrySet().stream()
+         .flatMap(famToQualVal -> famToQualVal.getValue().entrySet().stream()
+             .map(qualVal -> new SimpleImmutableEntry<>(
+                 new Key(row, famToQualVal.getKey(), qualVal.getKey(), 1),
+                 new Value(qualVal.getValue()))));
+   }
+ 
 +  public SortedMap<Key,Value> toKeyValues() {
 +    TreeMap<Key,Value> metamap = new TreeMap<>();
 +    getKeyValues().forEach(e -> metamap.put(e.getKey(), e.getValue()));
 +    return metamap;
 +  }
 +
    /**
     * Convert this class to a {@link TabletMetadata}
     */
    public TabletMetadata toTabletMetadata() {
-     Stream<SimpleImmutableEntry<Key,Value>> entries = getKeyValues();
-     return TabletMetadata.convertRow(entries.iterator(),
+     // use a stream so we don't have to re-sort in a new TreeMap<Key,Value> 
structure
 -    return TabletMetadata.convertRow(toKeyValues().iterator(),
 -        EnumSet.allOf(TabletMetadata.ColumnType.class), false);
++    return TabletMetadata.convertRow(getKeyValues().iterator(),
 +        EnumSet.allOf(TabletMetadata.ColumnType.class), false, false);
    }
  
-   private Stream<SimpleImmutableEntry<Key,Value>> getKeyValues() {
-     String row = RootTable.EXTENT.toMetaRow().toString();
-     Stream<SimpleImmutableEntry<Key,Value>> entries = 
data.columnValues.entrySet().stream()
-         .flatMap(famToQualVal -> famToQualVal.getValue().entrySet().stream()
-             .map(qualVal -> new SimpleImmutableEntry<>(
-                 new Key(row, famToQualVal.getKey(), qualVal.getKey(), 1),
-                 new Value(qualVal.getValue()))));
-     return entries;
-   }
- 
    public static boolean needsUpgrade(final String json) {
      return Data.needsUpgrade(json);
    }
diff --cc 
server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java
index 72127a4d4c,90a6eb4b62..6673c0dfdd
--- 
a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java
+++ 
b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java
@@@ -69,9 -77,21 +77,21 @@@ public class Upgrader11to12 implements 
        byte[] rootData = zrw.getData(rootBase, stat);
  
        String json = new String(rootData, UTF_8);
-       if (RootTabletMetadata.needsUpgrade(json)) {
+ 
+       var rtm = new RootTabletMetadata(json);
+ 
+       TreeMap<Key,Value> entries = new TreeMap<>();
 -      rtm.toKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
++      rtm.getKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
+           .forEach(entry -> entries.put(entry.getKey(), entry.getValue()));
+       ArrayList<Mutation> mutations = new ArrayList<>();
+ 
+       processReferences(mutations::add, entries.entrySet(), 
"root_table_metadata");
+ 
+       Preconditions.checkState(mutations.size() <= 1);
+ 
+       if (!mutations.isEmpty()) {
          log.info("Root metadata in ZooKeeper before upgrade: {}", json);
-         RootTabletMetadata rtm = RootTabletMetadata.upgrade(json);
+         rtm.update(mutations.get(0));
          zrw.overwritePersistentData(rootBase, rtm.toJson().getBytes(UTF_8), 
stat.getVersion());
          log.info("Root metadata in ZooKeeper after upgrade: {}", 
rtm.toJson());
        }
diff --cc 
server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java
index ee45534dab,9fedfe5813..01863bcd3c
--- 
a/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java
+++ 
b/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java
@@@ -458,4 -390,59 +390,59 @@@ public class Upgrader11to12Test 
      assertFalse(upgrader.fileNeedsConversion(s31));
      assertFalse(upgrader.fileNeedsConversion(s31_untrimmed));
    }
+ 
+   @Test
+   public void convertRoot1File() {
+     String root21ZkData =
+         
"{\"version\":1,\"columnValues\":{\"file\":{\"hdfs://localhost:8020/accumulo/tables/+r/root_tablet/A000000v.rf\":\"1368,61\"},\"last\":{\"100025091780006\":\"localhost:9997\"},\"loc\":{\"100025091780006\":\"localhost:9997\"},\"srv\":{\"dir\":\"root_tablet\",\"flush\":\"3\",\"lock\":\"tservers/localhost:9997/zlock#9db8961a-4ee9-400e-8e80-3353148baadd#0000000000$100025091780006\",\"time\":\"L53\"},\"~tab\":{\"~pr\":\"\\u0000\"}}}";
+ 
+     RootTabletMetadata rtm = new RootTabletMetadata(root21ZkData);
+     ArrayList<Mutation> mutations = new ArrayList<>();
+     Upgrader11to12 upgrader = new Upgrader11to12();
+     upgrader.processReferences(mutations::add,
 -        rtm.toKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
++        rtm.getKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
+             .collect(Collectors.toList()),
+         "accumulo.metadata");
+     assertEquals(1, mutations.size());
+     var mutation = mutations.get(0);
+     rtm.update(mutation);
+ 
+     LOG.debug("converted column values: {}", 
rtm.toTabletMetadata().getFiles());
+ 
+     var files = rtm.toTabletMetadata().getFiles();
+     LOG.info("FILES: {}", rtm.toTabletMetadata().getFilesMap());
+ 
+     assertEquals(1, files.size());
+     assertTrue(files.contains(StoredTabletFile
+         .of(new 
Path("hdfs://localhost:8020/accumulo/tables/+r/root_tablet/A000000v.rf"))));
+   }
+ 
+   @Test
+   public void convertRoot2Files() {
+     String root212ZkData2Files =
+         
"{\"version\":1,\"columnValues\":{\"file\":{\"hdfs://localhost:8020/accumulo/tables/+r/root_tablet/00000_00000.rf\":\"0,0\",\"hdfs://localhost:8020/accumulo/tables/+r/root_tablet/F000000c.rf\":\"926,18\"},\"last\":{\"10001a84d7d0005\":\"localhost:9997\"},\"loc\":{\"10001a84d7d0005\":\"localhost:9997\"},\"srv\":{\"dir\":\"root_tablet\",\"flush\":\"2\",\"lock\":\"tservers/localhost:9997/zlock#d21adaa4-0f97-4004-9ff8-cce9dbb6687f#0000000000$10001a84d7d0005\",\"time\":\"L6\"},\"~tab
 [...]
+ 
+     RootTabletMetadata rtm = new RootTabletMetadata(root212ZkData2Files);
+     ArrayList<Mutation> mutations = new ArrayList<>();
+     Upgrader11to12 upgrader = new Upgrader11to12();
+     upgrader.processReferences(mutations::add,
 -        rtm.toKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
++        rtm.getKeyValues().filter(e -> 
UPGRADE_FAMILIES.contains(e.getKey().getColumnFamily()))
+             .collect(Collectors.toList()),
+         "accumulo.metadata");
+     assertEquals(1, mutations.size());
+     var mutation = mutations.get(0);
+     rtm.update(mutation);
+ 
+     LOG.debug("converted column values: {}", rtm.toTabletMetadata());
+ 
+     var files = rtm.toTabletMetadata().getFiles();
+     LOG.info("FILES: {}", rtm.toTabletMetadata().getFilesMap());
+ 
+     assertEquals(2, files.size());
+     assertTrue(files.contains(StoredTabletFile
+         .of(new 
Path("hdfs://localhost:8020/accumulo/tables/+r/root_tablet/00000_00000.rf"))));
+     assertTrue(files.contains(StoredTabletFile
+         .of(new 
Path("hdfs://localhost:8020/accumulo/tables/+r/root_tablet/F000000c.rf"))));
+   }
+ 
  }

Reply via email to