|
18 | 18 | */
|
19 | 19 | package org.apache.accumulo.core.metadata.schema;
|
20 | 20 |
|
| 21 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.MergedColumnFamily.MERGED_COLUMN; |
| 22 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.DIRECTORY_COLUMN; |
21 | 23 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.DIRECTORY_QUAL;
|
| 24 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.FLUSH_COLUMN; |
| 25 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.FLUSH_NONCE_COLUMN; |
22 | 26 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.FLUSH_NONCE_QUAL;
|
23 | 27 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.FLUSH_QUAL;
|
| 28 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.OPID_COLUMN; |
24 | 29 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.OPID_QUAL;
|
| 30 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.SELECTED_COLUMN; |
25 | 31 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.SELECTED_QUAL;
|
| 32 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.TIME_COLUMN; |
26 | 33 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily.TIME_QUAL;
|
| 34 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.SplitColumnFamily.UNSPLITTABLE_COLUMN; |
| 35 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.SuspendLocationColumn.SUSPEND_COLUMN; |
| 36 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.AVAILABILITY_COLUMN; |
27 | 37 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.AVAILABILITY_QUAL;
|
| 38 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.MERGEABILITY_COLUMN; |
28 | 39 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.MERGEABILITY_QUAL;
|
| 40 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.PREV_ROW_COLUMN; |
29 | 41 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.PREV_ROW_QUAL;
|
| 42 | +import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.REQUESTED_COLUMN; |
30 | 43 | import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily.REQUESTED_QUAL;
|
31 | 44 |
|
32 | 45 | import java.util.Collection;
|
|
40 | 53 | import java.util.Optional;
|
41 | 54 | import java.util.OptionalLong;
|
42 | 55 | import java.util.Set;
|
| 56 | +import java.util.stream.Collectors; |
43 | 57 |
|
44 | 58 | import org.apache.accumulo.core.client.admin.TabletAvailability;
|
45 | 59 | import org.apache.accumulo.core.clientImpl.ClientContext;
|
46 | 60 | import org.apache.accumulo.core.clientImpl.TabletAvailabilityUtil;
|
| 61 | +import org.apache.accumulo.core.data.ArrayByteSequence; |
47 | 62 | import org.apache.accumulo.core.data.ByteSequence;
|
48 | 63 | import org.apache.accumulo.core.data.Key;
|
49 | 64 | import org.apache.accumulo.core.data.TableId;
|
|
58 | 73 | import org.apache.accumulo.core.metadata.StoredTabletFile;
|
59 | 74 | import org.apache.accumulo.core.metadata.SuspendingTServer;
|
60 | 75 | import org.apache.accumulo.core.metadata.TServerInstance;
|
| 76 | +import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; |
61 | 77 | import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily;
|
62 | 78 | import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily;
|
63 | 79 | import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CompactedColumnFamily;
|
|
75 | 91 | import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily;
|
76 | 92 | import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.UserCompactionRequestedColumnFamily;
|
77 | 93 | import org.apache.accumulo.core.tabletserver.log.LogEntry;
|
| 94 | +import org.apache.accumulo.core.util.ColumnFQ; |
78 | 95 | import org.apache.accumulo.core.zookeeper.ZcStat;
|
79 | 96 | import org.apache.commons.lang3.builder.ToStringBuilder;
|
80 | 97 | import org.apache.commons.lang3.builder.ToStringStyle;
|
@@ -202,7 +219,152 @@ public enum ColumnType {
|
202 | 219 | COMPACTED,
|
203 | 220 | USER_COMPACTION_REQUESTED,
|
204 | 221 | UNSPLITTABLE,
|
205 |
| - MERGEABILITY |
| 222 | + MERGEABILITY; |
| 223 | + |
| 224 | + public static final Map<ColumnType,Set<Text>> COLUMNS_TO_FAMILIES; |
| 225 | + public static final Map<ColumnType,ColumnFQ> COLUMNS_TO_QUALIFIERS; |
| 226 | + |
| 227 | + static { |
| 228 | + ImmutableMap.Builder<ColumnType,Set<Text>> colsToFamilies = ImmutableMap.builder(); |
| 229 | + ImmutableMap.Builder<ColumnType,ColumnFQ> colsToQualifiers = ImmutableMap.builder(); |
| 230 | + |
| 231 | + for (ColumnType column : EnumSet.allOf(ColumnType.class)) { |
| 232 | + switch (column) { |
| 233 | + case CLONED: |
| 234 | + colsToFamilies.put(column, Set.of(ClonedColumnFamily.NAME)); |
| 235 | + break; |
| 236 | + case DIR: |
| 237 | + case FLUSH_ID: |
| 238 | + case TIME: |
| 239 | + case OPID: |
| 240 | + case SELECTED: |
| 241 | + case FLUSH_NONCE: |
| 242 | + colsToFamilies.put(column, Set.of(ServerColumnFamily.NAME)); |
| 243 | + break; |
| 244 | + case FILES: |
| 245 | + colsToFamilies.put(column, Set.of(DataFileColumnFamily.NAME)); |
| 246 | + break; |
| 247 | + case AVAILABILITY: |
| 248 | + case HOSTING_REQUESTED: |
| 249 | + case PREV_ROW: |
| 250 | + case MERGEABILITY: |
| 251 | + colsToFamilies.put(column, Set.of(TabletColumnFamily.NAME)); |
| 252 | + break; |
| 253 | + case LAST: |
| 254 | + colsToFamilies.put(column, Set.of(LastLocationColumnFamily.NAME)); |
| 255 | + break; |
| 256 | + case LOADED: |
| 257 | + colsToFamilies.put(column, Set.of(BulkFileColumnFamily.NAME)); |
| 258 | + break; |
| 259 | + case LOCATION: |
| 260 | + colsToFamilies.put(column, |
| 261 | + Set.of(CurrentLocationColumnFamily.NAME, FutureLocationColumnFamily.NAME)); |
| 262 | + break; |
| 263 | + case LOGS: |
| 264 | + colsToFamilies.put(column, Set.of(LogColumnFamily.NAME)); |
| 265 | + break; |
| 266 | + case SCANS: |
| 267 | + colsToFamilies.put(column, Set.of(ScanFileColumnFamily.NAME)); |
| 268 | + break; |
| 269 | + case SUSPEND: |
| 270 | + colsToFamilies.put(column, Set.of(SuspendLocationColumn.NAME)); |
| 271 | + break; |
| 272 | + case ECOMP: |
| 273 | + colsToFamilies.put(column, Set.of(ExternalCompactionColumnFamily.NAME)); |
| 274 | + break; |
| 275 | + case MERGED: |
| 276 | + colsToFamilies.put(column, Set.of(MergedColumnFamily.NAME)); |
| 277 | + break; |
| 278 | + case COMPACTED: |
| 279 | + colsToFamilies.put(column, Set.of(CompactedColumnFamily.NAME)); |
| 280 | + break; |
| 281 | + case USER_COMPACTION_REQUESTED: |
| 282 | + colsToFamilies.put(column, Set.of(UserCompactionRequestedColumnFamily.NAME)); |
| 283 | + break; |
| 284 | + case UNSPLITTABLE: |
| 285 | + colsToFamilies.put(column, Set.of(SplitColumnFamily.NAME)); |
| 286 | + break; |
| 287 | + default: |
| 288 | + throw new IllegalArgumentException("Unknown col type " + column); |
| 289 | + } |
| 290 | + } |
| 291 | + |
| 292 | + for (ColumnType column : EnumSet.allOf(ColumnType.class)) { |
| 293 | + switch (column) { |
| 294 | + case CLONED: |
| 295 | + case COMPACTED: |
| 296 | + case ECOMP: |
| 297 | + case FILES: |
| 298 | + case LAST: |
| 299 | + case LOADED: |
| 300 | + case LOCATION: |
| 301 | + case LOGS: |
| 302 | + case SCANS: |
| 303 | + case USER_COMPACTION_REQUESTED: |
| 304 | + break; |
| 305 | + case DIR: |
| 306 | + colsToQualifiers.put(column, DIRECTORY_COLUMN); |
| 307 | + break; |
| 308 | + case FLUSH_ID: |
| 309 | + colsToQualifiers.put(column, FLUSH_COLUMN); |
| 310 | + break; |
| 311 | + case TIME: |
| 312 | + colsToQualifiers.put(column, TIME_COLUMN); |
| 313 | + break; |
| 314 | + case OPID: |
| 315 | + colsToQualifiers.put(column, OPID_COLUMN); |
| 316 | + break; |
| 317 | + case SELECTED: |
| 318 | + colsToQualifiers.put(column, SELECTED_COLUMN); |
| 319 | + break; |
| 320 | + case FLUSH_NONCE: |
| 321 | + colsToQualifiers.put(column, FLUSH_NONCE_COLUMN); |
| 322 | + break; |
| 323 | + case AVAILABILITY: |
| 324 | + colsToQualifiers.put(column, AVAILABILITY_COLUMN); |
| 325 | + break; |
| 326 | + case HOSTING_REQUESTED: |
| 327 | + colsToQualifiers.put(column, REQUESTED_COLUMN); |
| 328 | + break; |
| 329 | + case PREV_ROW: |
| 330 | + colsToQualifiers.put(column, PREV_ROW_COLUMN); |
| 331 | + break; |
| 332 | + case MERGEABILITY: |
| 333 | + colsToQualifiers.put(column, MERGEABILITY_COLUMN); |
| 334 | + break; |
| 335 | + case SUSPEND: |
| 336 | + colsToQualifiers.put(column, SUSPEND_COLUMN); |
| 337 | + break; |
| 338 | + case MERGED: |
| 339 | + colsToQualifiers.put(column, MERGED_COLUMN); |
| 340 | + break; |
| 341 | + case UNSPLITTABLE: |
| 342 | + colsToQualifiers.put(column, UNSPLITTABLE_COLUMN); |
| 343 | + break; |
| 344 | + default: |
| 345 | + throw new IllegalArgumentException("Unknown col type " + column); |
| 346 | + } |
| 347 | + } |
| 348 | + |
| 349 | + COLUMNS_TO_FAMILIES = colsToFamilies.build(); |
| 350 | + COLUMNS_TO_QUALIFIERS = colsToQualifiers.build(); |
| 351 | + } |
| 352 | + |
| 353 | + public static Set<ByteSequence> resolveFamilies(Set<ColumnType> columns) { |
| 354 | + return columns.stream() |
| 355 | + .flatMap(cf -> COLUMNS_TO_FAMILIES.get(cf).stream() |
| 356 | + .map(family -> new ArrayByteSequence(family.copyBytes()))) |
| 357 | + .collect(Collectors.toUnmodifiableSet()); |
| 358 | + } |
| 359 | + |
| 360 | + public static Set<Text> resolveFamiliesAsText(ColumnType column) { |
| 361 | + return COLUMNS_TO_FAMILIES.get(column); |
| 362 | + } |
| 363 | + |
| 364 | + public static ColumnFQ resolveQualifier(ColumnType columnType) { |
| 365 | + return COLUMNS_TO_QUALIFIERS.get(columnType); |
| 366 | + } |
| 367 | + |
206 | 368 | }
|
207 | 369 |
|
208 | 370 | public static class Location {
|
|
0 commit comments