code: public BaseWindowedBolt<T> withStateSize(Time size) {
          long s = size.toMilliseconds();
          ensurePositiveTime(s);
          ensureStateSizeGreaterThanWindowSize(this.size, s);
  
          this.stateSize = s;
          if (WindowAssigner.isEventTime(this.windowAssigner)) {
              this.stateWindowAssigner = TumblingEventTimeWindows.of(s);
          } else if (WindowAssigner.isProcessingTime(this.windowAssigner)) {
              this.stateWindowAssigner = TumblingProcessingTimeWindows.of(s);
          } else if (WindowAssigner.isIngestionTime(this.windowAssigner)) {
              this.stateWindowAssigner = TumblingIngestionTimeWindows.of(s);
          }
  
          return this;
      }
docs: add state window to tumbling windows.
  If set, jstorm will use state window size to accumulate user states instead of
  deleting the states right after purging a window.
  
  e.g., if a user defines a window of 10 sec as well as a state window of 60 sec,
  then the window will be purged every 10 sec, while the state of the window will be kept (and accumulated)
  until 60 sec is due.
  
  @param size state window size