Merge branch 'cassandra-3.0' into cassandra-3.11
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/02bbdd63 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/02bbdd63 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/02bbdd63 Branch: refs/heads/trunk Commit: 02bbdd63422c57efa4ba2356e72d87a28aebaaf8 Parents: 36375f8 685dde1 Author: Jason Brown <jasedbr...@gmail.com> Authored: Mon Jan 15 06:03:50 2018 -0800 Committer: Jason Brown <jasedbr...@gmail.com> Committed: Mon Jan 15 06:05:04 2018 -0800 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ bin/cqlsh.py | 8 ++++++-- pylib/cqlshlib/copyutil.py | 8 ++++---- pylib/cqlshlib/cql3handling.py | 18 ++++++++++++++++++ pylib/cqlshlib/displaying.py | 1 + pylib/cqlshlib/formatting.py | 18 ++++++++++++++++++ pylib/cqlshlib/pylexotron.py | 1 + pylib/cqlshlib/wcwidth.py | 3 +++ 8 files changed, 53 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index 973939e,8696653..ebb7a66 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -41,23 -25,11 +41,25 @@@ Merged from 2.2 * Fix the inspectJvmOptions startup check (CASSANDRA-14112) * Fix race that prevents submitting compaction for a table when executor is full (CASSANDRA-13801) * Rely on the JVM to handle OutOfMemoryErrors (CASSANDRA-13006) + * Grab refs during scrub/index redistribution/cleanup (CASSANDRA-13873) + Merged from 2.1: - * More PEP8 compliance for cqlsh (CASSANDRA-14021) - - -3.0.15 ++ * More PEP8 compiance for cqlsh (CASSANDRA-14021) + + +3.11.1 + * Fix the computation of cdc_total_space_in_mb for exabyte filesystems (CASSANDRA-13808) + * AbstractTokenTreeBuilder#serializedSize returns wrong value when there is a single leaf and overflow collisions (CASSANDRA-13869) + * Add a compaction option to TWCS to ignore sstables overlapping checks (CASSANDRA-13418) + * BTree.Builder memory leak (CASSANDRA-13754) + * Revert CASSANDRA-10368 of supporting non-pk column filtering due to correctness (CASSANDRA-13798) + * Add a skip read validation flag to cassandra-stress (CASSANDRA-13772) + * Fix cassandra-stress hang issues when an error during cluster connection happens (CASSANDRA-12938) + * Better bootstrap failure message when blocked by (potential) range movement (CASSANDRA-13744) + * "ignore" option is ignored in sstableloader (CASSANDRA-13721) + * Deadlock in AbstractCommitLogSegmentManager (CASSANDRA-13652) + * Duplicate the buffer before passing it to analyser in SASI operation (CASSANDRA-13512) + * Properly evict pstmts from prepared statements cache (CASSANDRA-13641) +Merged from 3.0: * Improve TRUNCATE performance (CASSANDRA-13909) * Implement short read protection on partition boundaries (CASSANDRA-13595) * Fix ISE thrown by UPI.Serializer.hasNext() for some SELECT queries (CASSANDRA-13911) http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/bin/cqlsh.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/pylib/cqlshlib/copyutil.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/pylib/cqlshlib/cql3handling.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/pylib/cqlshlib/displaying.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/02bbdd63/pylib/cqlshlib/formatting.py ---------------------------------------------------------------------- diff --cc pylib/cqlshlib/formatting.py index cf3b32d,dfef609..803ea63 --- a/pylib/cqlshlib/formatting.py +++ b/pylib/cqlshlib/formatting.py @@@ -100,18 -99,19 +102,19 @@@ def color_text(bval, colormap, displayw displaywidth -= bval.count(r'\\') return FormattedValue(bval, coloredval, displaywidth) + DEFAULT_NANOTIME_FORMAT = '%H:%M:%S.%N' DEFAULT_DATE_FORMAT = '%Y-%m-%d' -DEFAULT_TIMESTAMP_FORMAT = '%Y-%m-%d %H:%M:%S%z' -if platform.system() == 'Windows': - DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z' +DEFAULT_TIMESTAMP_FORMAT = os.environ.get('CQLSH_DEFAULT_TIMESTAMP_FORMAT', '') +if not DEFAULT_TIMESTAMP_FORMAT: + DEFAULT_TIMESTAMP_FORMAT = '%Y-%m-%d %H:%M:%S.%f%z' -class DateTimeFormat(): +class DateTimeFormat: def __init__(self, timestamp_format=DEFAULT_TIMESTAMP_FORMAT, date_format=DEFAULT_DATE_FORMAT, - nanotime_format=DEFAULT_NANOTIME_FORMAT, timezone=None): + nanotime_format=DEFAULT_NANOTIME_FORMAT, timezone=None, milliseconds_only=False): self.timestamp_format = timestamp_format self.date_format = date_format self.nanotime_format = nanotime_format @@@ -237,8 -152,9 +241,10 @@@ def formatter_for(typname) def format_value_blob(val, colormap, **_): bval = '0x' + binascii.hexlify(val) return colorme(bval, colormap, 'blob') + + formatter_for('buffer')(format_value_blob) +formatter_for('blob')(format_value_blob) def format_python_formatted_type(val, colormap, color, quote=False): @@@ -259,9 -175,7 +265,10 @@@ def format_value_decimal(val, float_pre def format_value_uuid(val, colormap, **_): return format_python_formatted_type(val, colormap, 'uuid') + +formatter_for('timeuuid')(format_value_uuid) + + @formatter_for('inet') def formatter_value_inet(val, colormap, quote=False, **_): return format_python_formatted_type(val, colormap, 'inet', quote=quote) @@@ -273,9 -187,7 +280,10 @@@ def format_value_boolean(val, colormap val = boolean_styles[0] if val else boolean_styles[1] return format_python_formatted_type(val, colormap, 'boolean') + +formatter_for('boolean')(format_value_boolean) + + def format_floating_point_type(val, colormap, float_precision, decimal_sep=None, thousands_sep=None, **_): if math.isnan(val): bval = 'NaN' @@@ -302,8 -214,8 +310,9 @@@ return colorme(bval, colormap, 'float') + formatter_for('float')(format_floating_point_type) +formatter_for('double')(format_floating_point_type) def format_integer_type(val, colormap, thousands_sep=None, **_): @@@ -348,12 -249,9 +358,13 @@@ def format_value_timestamp(val, colorma bval = "'%s'" % bval return colorme(bval, colormap, 'timestamp') + -def strftime(time_format, seconds, timezone=None): - ret_dt = datetime_from_timestamp(seconds).replace(tzinfo=UTC()) +formatter_for('timestamp')(format_value_timestamp) + + +def strftime(time_format, seconds, microseconds=0, timezone=None): + ret_dt = datetime_from_timestamp(seconds) + datetime.timedelta(microseconds=microseconds) + ret_dt = ret_dt.replace(tzinfo=UTC()) if timezone: ret_dt = ret_dt.astimezone(timezone) try: @@@ -366,24 -264,7 +377,25 @@@ # able to correctly import timestamps exported as milliseconds since the epoch. return '%d' % (seconds * 1000.0) + +microseconds_regex = re.compile("(.*)(?:\.(\d{1,6}))(.*)") + + +def round_microseconds(val): + """ + For COPY TO, we need to round microsecond to milliseconds because server side + TimestampSerializer.dateStringPatterns only parses milliseconds. If we keep microseconds, + users may try to import with COPY FROM a file generated with COPY TO and have problems if + prepared statements are disabled, see CASSANDRA-11631. + """ + m = microseconds_regex.match(val) + if not m: + return val + + milliseconds = int(m.group(2)) * pow(10, 3 - len(m.group(2))) + return '%s.%03d%s' % (m.group(1), milliseconds, '' if not m.group(3) else m.group(3)) + + @formatter_for('Date') def format_value_date(val, colormap, **_): return format_python_formatted_type(val, colormap, 'date') @@@ -475,16 -287,15 +487,17 @@@ def format_value_text(val, encoding, co return bval if colormap is NO_COLOR_MAP else color_text(bval, colormap, wcwidth.wcswidth(bval.decode(encoding))) + # name alias formatter_for('unicode')(format_value_text) +formatter_for('text')(format_value_text) +formatter_for('ascii')(format_value_text) -def format_simple_collection(val, lbracket, rbracket, encoding, +def format_simple_collection(val, cqltype, lbracket, rbracket, encoding, colormap, date_time_format, float_precision, nullval, decimal_sep, thousands_sep, boolean_styles): - subs = [format_value(type(sval), sval, encoding=encoding, colormap=colormap, + subs = [format_value(sval, cqltype=stype, encoding=encoding, colormap=colormap, date_time_format=date_time_format, float_precision=float_precision, nullval=nullval, quote=True, decimal_sep=decimal_sep, thousands_sep=thousands_sep, boolean_styles=boolean_styles) @@@ -517,11 -328,13 +530,13 @@@ def format_value_tuple(val, cqltype, en @formatter_for('set') -def format_value_set(val, encoding, colormap, date_time_format, float_precision, nullval, +def format_value_set(val, cqltype, encoding, colormap, date_time_format, float_precision, nullval, decimal_sep, thousands_sep, boolean_styles, **_): - return format_simple_collection(sorted(val), '{', '}', encoding, colormap, + return format_simple_collection(sorted(val), cqltype, '{', '}', encoding, colormap, date_time_format, float_precision, nullval, decimal_sep, thousands_sep, boolean_styles) + + formatter_for('frozenset')(format_value_set) formatter_for('sortedset')(format_value_set) formatter_for('SortedSet')(format_value_set) @@@ -580,10 -393,3 +597,11 @@@ def format_value_utype(val, cqltype, en + rb displaywidth = 4 * len(subs) + sum(k.displaywidth + v.displaywidth for (k, v) in subs) return FormattedValue(bval, coloredval, displaywidth) + ++ +NANOS_PER_MICRO = 1000 +NANOS_PER_MILLI = 1000 * NANOS_PER_MICRO +NANOS_PER_SECOND = 1000 * NANOS_PER_MILLI +NANOS_PER_MINUTE = 60 * NANOS_PER_SECOND +NANOS_PER_HOUR = 60 * NANOS_PER_MINUTE +MONTHS_PER_YEAR = 12 --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org