public boolean append()

in holo-client/src/main/java/com/alibaba/hologres/client/impl/collector/RecordCollector.java [73:166]


	public boolean append(Record record) {
		if (startTimeMs == -1) {
			startTimeMs = System.currentTimeMillis();
		}
		Map<RecordKey, Record> recordMap = records;
		Map<RecordKey, Record> deleteMap = deleteRecords;

		RecordKey key = new RecordKey(record);
		Record origin = recordMap.get(key);
		if (origin != null) {
			switch (record.getType()) {
				case DELETE:
					Record deleteRecord = deleteMap.get(key);
					/*
					 * 如果delete列表没有这个key
					 * record.attachmentList=origin.attachmentList+record.attachmentList
					 * 否则
					 * record.attachmentList=deleteRecord.attachmentList+origin.attachmentList+record.attachmentList
					 * */
					if (null != deleteRecord) {
						size += -1;
						byteSize -= deleteRecord.getByteSize();
						origin.cover(deleteRecord);
					}
					record.cover(origin);
					recordMap.remove(key);
					byteSize -= origin.getByteSize();
					byteSize += record.getByteSize();
					deleteMap.put(key, record);
					break;
				case INSERT:
					switch (mode) {
						case INSERT_OR_UPDATE:
							byteSize -= origin.getByteSize();
							origin.merge(record);
							byteSize += origin.getByteSize();
							origin.setType(Put.MutationType.INSERT);
							break;
						case INSERT_OR_IGNORE:
							origin.addAttachmentList(record.getAttachmentList());
							break;
						case INSERT_OR_REPLACE:
							record.cover(origin);
							byteSize -= origin.getByteSize();
							byteSize += record.getByteSize();
							recordMap.put(key, record);
							break;
						default:
							break;
					}
					break;
				default:
					break;
			}
		} else {
			Record baseRecord;
			switch (record.getType()) {
				case DELETE:
					baseRecord = deleteMap.get(key);
					if (baseRecord == null) {
						size += 1;
					} else {
						byteSize -= baseRecord.getByteSize();
						record.cover(baseRecord);
					}
					byteSize += record.getByteSize();
					deleteMap.put(key, record);
					break;
				case INSERT:
					byteSize += record.getByteSize();
					recordMap.put(key, record);
					if (mode == WriteMode.INSERT_OR_REPLACE) {
						baseRecord = deleteMap.get(key);
						if (baseRecord == null) {
							size += 1;
						} else {
							byteSize -= baseRecord.getByteSize();
							record.cover(baseRecord);
							deleteMap.remove(key);
						}
					} else {
						++size;
					}
					break;
				default:
					break;
			}
		}
		BatchState bs = getBatchState();
		if (bs != BatchState.NotEnough) {
			return true;
		}
		return false;
	}