<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 20/10/14 16:04, Don Waterloo wrote:<br>
    </div>
    <blockquote
cite="mid:CAKrvkGfAuouqVfbn+1jg+C+y-xNH9wxJv2jPQGpvWC0Cmqq3dA@mail.gmail.com"
      type="cite">
      <div dir="ltr">After doing this upgrade (with a good chunk of data
        in the database that was created on icehouse), i'm running into
        a problem I'm wondering if anyone else has seen.
        <div><br>
        </div>
        <div>In particular, if i do a 'heat resource-list' on a stack
          that was created with icehouse, i get an error, which is
          below.</div>
        <div><br>
        </div>
        <div>I'm not sure how to approach this, my assumption is there
          is some data in my database which is not formatted correctly,
          but 'which' data is the problem.</div>
        <div><br>
        </div>
        <div>I turned on mysql logging, and all the queries function, so
          it is parsing something that comes back which is the problem.
          The below trace makes me thing some column is null or '' in
          the old, and is expected in the new.</div>
        <div><br>
        </div>
        <div>Any suggestions as to where to look next?</div>
        <div><br>
        </div>
        <div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/engine/stack.py",
            line 348, in __iter__</div>
          <div>    return iter(self.resources)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/engine/stack.py",
            line 159, in resources<br>
          </div>
          <div>    self.t.resource_definitions(self).items())</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/engine/stack.py",
            line 158, in <genexpr><br>
          </div>
          <div>    for (name, data) in</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/engine/resource.py",
            line 191, in __init__<br>
          </div>
          <div>    resource = stack.db_resource_get(name)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/engine/stack.py",
            line 190, in db_resource_get<br>
          </div>
          <div>    self.context, <a moz-do-not-send="true"
              href="http://self.id">self.id</a>)</div>
          <div>  File "/usr/lib/python2.7/dist-packages/heat/db/api.py",
            line 96, in resource_get_all_by_stack<br>
          </div>
          <div>    return IMPL.resource_get_all_by_stack(context,
            stack_id)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/db/sqlalchemy/api.py",
            line 263, in resource_get_all_by_stack<br>
          </div>
          <div>    options(orm.joinedload("data")).all()</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py",
            line 2300, in all<br>
          </div>
          <div>    return list(self)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/loading.py",
            line 73, in instances<br>
          </div>
          <div>    rows = [process[0](row, None) for row in fetch]</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/loading.py",
            line 455, in _instance<br>
          </div>
          <div>    populate_state(state, dict_, row, isnew,
            only_load_props)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/loading.py",
            line 305, in populate_state<br>
          </div>
          <div>    populator(state, dict_, row)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/strategies.py",
            line 169, in fetch_col<br>
          </div>
          <div>    dict_[key] = row[col]</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/sqlalchemy/sql/type_api.py",
            line 911, in process<br>
          </div>
          <div>    return process_value(impl_processor(value), dialect)</div>
          <div>  File
            "/usr/lib/python2.7/dist-packages/heat/db/sqlalchemy/types.py",
            line 37, in process_result_value<br>
          </div>
          <div>    return loads(value)</div>
          <div>  File "/usr/lib/python2.7/json/__init__.py", line 338,
            in loads<br>
          </div>
          <div>    return _default_decoder.decode(s)</div>
          <div>  File "/usr/lib/python2.7/json/decoder.py", line 366, in
            decode<br>
          </div>
          <div>    obj, end = self.raw_decode(s, idx=_w(s, 0).end())</div>
          <div>TypeError: expected string or buffer<br>
          </div>
        </div>
        <div><br>
        </div>
      </div>
      <br>
    </blockquote>
    <br>
    The most likely culprit is a Json column which was added in the Juno
    cycle. My guess would be resource.properties_data.<br>
    <br>
    Could you run an update query to set existing null
    resource.properties_data values to '{}'?<br>
    <br>
    I've raised the following bug to track this:<br>
    <a class="moz-txt-link-freetext" href="https://bugs.launchpad.net/heat/+bug/1383505">https://bugs.launchpad.net/heat/+bug/1383505</a><br>
    <br>
    If your update query works could you comment on the bug? The
    backported code fix will either make the Json type tolerate None, or
    add a new migration script.<br>
  </body>
</html>